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

Циклы в Си++, хотелось бы уточнить некоторые моменты - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.93
Fafle
 Аватар для Fafle
34 / 34 / 4
Регистрация: 19.03.2010
Сообщений: 136
22.03.2010, 00:53     Циклы в Си++, хотелось бы уточнить некоторые моменты #1
Начинаю изучать Си, учусь по самоучителю при отсутствии знакомых и друзей программистов, пройдя главу про циклы так и не смог уяснить для себя в каких ситуациях и как правильно выбрать тот или иной вид цикла(for, while, do while).
Если кого то не затруднит прошу объяснить,по возможности с примерами, заранее благодарю.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
22.03.2010, 01:20     Циклы в Си++, хотелось бы уточнить некоторые моменты #2
for - в том случае, если известно количество итераций цикла.
C++
1
2
3
int mas[10];
for(int i = 0; i < 10; ++i)
    mas[i] = i;
while - если не известно количество итераций
C++
1
2
3
4
char str[] = "some string"
int i = 0;
while(str[i])
    ++i;
do while - если не известно количество итераций и необходимо до проверки условий выполнить какое-то действие
C++
1
2
3
4
5
6
7
int mas[10];
int i = 0;
do
{
    mas[i] = i;
    ++i;
}while(i < 10);
Fafle
 Аватар для Fafle
34 / 34 / 4
Регистрация: 19.03.2010
Сообщений: 136
22.03.2010, 01:25  [ТС]     Циклы в Си++, хотелось бы уточнить некоторые моменты #3
парочку задачек элементарных не подскажешь? Чтоб руку набить, если не сложно.
Предельно понятно спс.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
22.03.2010, 01:35     Циклы в Си++, хотелось бы уточнить некоторые моменты #4
Fafle, в этой ветке любая задача на массивы или расчет функции, берите и решайте. И себе опыт и другим помощь
Day
 Аватар для Day
1149 / 954 / 57
Регистрация: 29.10.2009
Сообщений: 1,384
22.03.2010, 10:34     Циклы в Си++, хотелось бы уточнить некоторые моменты #5
Небольшое, но, возможно, полезное пояснение.
Цикл while может и не выполниться не разу, если его условие сразу неверно.
(сначала "меряем" потом "режем")
цикл do - while обязательно выполнится хотя бы один раз
(сначала "режем", потом "меряем")
Тоже самое, но чуток другими словами.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
22.03.2010, 10:41     Циклы в Си++, хотелось бы уточнить некоторые моменты #6
Цитата Сообщение от M128K145 Посмотреть сообщение
while - если не известно количество итераций
Не совсем так видимо, во всех трех случаях я знаю что итераций будет 9
C++
1
2
3
4
5
6
7
8
9
10
11
12
    i = 1;
    while(i < 10)
        cout << i++ << ' ';
    cout << endl;
 
    i = 0;
    while(++i, i < 10)
        cout << i << ' ';
    cout << endl;
    
    for(i = 1; i < 10; ++i)
        cout << i << ' ';
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
22.03.2010, 10:59     Циклы в Си++, хотелось бы уточнить некоторые моменты #7
Можно всегда использовать цикл for.
Например цикл while( <EXPR> ) { <BODY> } заменяется на
C
1
2
3
for ( ; <EXPR>; ) {
    <BODY>
}
Цикл do { <BODY> } while ( <EXPR> ); заменяется на
C
1
2
3
4
for ( ; ; ) {
    <BODY>;
    if ( !<EXPR> ) { break; }
}
Добавлено через 1 минуту
Поэтому вопрос какой вариант цикла выбирать немного бессмысленный.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
22.03.2010, 11:04     Циклы в Си++, хотелось бы уточнить некоторые моменты #8
Цитата Сообщение от odip Посмотреть сообщение
Поэтому вопрос какой вариант цикла выбирать немного бессмысленный.
Тут наверное все больше зависит от конкретного момента, где что эффективнее,
Мне почему-то кажется, что вот в таком моменте цикл while эффективнее ну или как минимум симпатичнее
C++
1
2
3
4
5
6
7
8
9
10
11
void fwhile(int x)
{
    while(x--)
        // some code
}
 
void ffor(int x)
{
    for(int i = 0; i < x; ++i)
        // some code
}
И наоборот
C++
1
2
3
4
5
6
7
8
9
    for(int i = 0; i < 10; i += 2)
        // some code
        
    int i = 0;
    while(i < 10)
    {
        // some code
        i += 2;
    }
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
23.03.2010, 10:38     Циклы в Си++, хотелось бы уточнить некоторые моменты #9
Мне почему-то кажется, что вот в таком моменте цикл while эффективнее
Эффективность кода оценивается не на глазок, а тестами, изучением какой код в ASM-е генерится и проверкой что быстрее работает.
ну или как минимум симпатичнее
Если кажется что симпатичнее - используй такой вариант.
Day
 Аватар для Day
1149 / 954 / 57
Регистрация: 29.10.2009
Сообщений: 1,384
23.03.2010, 10:58     Циклы в Си++, хотелось бы уточнить некоторые моменты #10
odip,
Можно всегда использовать цикл for.
Можно вообще обойтись без циклов, используя только if и goto
На ASM это и в самом деле будет так.
Дело-то в выразительности и понятности конструкции...
И тут слово "симпатичнее" вполне уместно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.03.2010, 12:28     Циклы в Си++, хотелось бы уточнить некоторые моменты
Еще ссылки по теме:

C++ Шейкер Сортировка! Непонятны некоторые моменты
C++ Добрый день, читал на хабре про АВЛ-деревья и хотелось бы кое-что уточнить
C++ Уточнить вид сортировки

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

Или воспользуйтесь поиском по форуму:
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
23.03.2010, 12:28     Циклы в Си++, хотелось бы уточнить некоторые моменты #11
сам фор использую для счетчика,или заполнения массивов...ду-вайл хорош тем что полюбому один раз тело работает.Даже если условие не истенно
Yandex
Объявления
23.03.2010, 12:28     Циклы в Си++, хотелось бы уточнить некоторые моменты
Ответ Создать тему
Опции темы

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