Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/22: Рейтинг темы: голосов - 22, средняя оценка - 4.82
34 / 34 / 9
Регистрация: 19.03.2010
Сообщений: 136
1

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

22.03.2010, 00:53. Показов 4575. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Начинаю изучать Си, учусь по самоучителю при отсутствии знакомых и друзей программистов, пройдя главу про циклы так и не смог уяснить для себя в каких ситуациях и как правильно выбрать тот или иной вид цикла(for, while, do while).
Если кого то не затруднит прошу объяснить,по возможности с примерами, заранее благодарю.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.03.2010, 00:53
Ответы с готовыми решениями:

Настраиваю локальную сеть, нужно уточнить некоторые моменты
Поручили настроить Локальную сеть, монтажник оставил такие данные на листе : 42.24.1.10,...

Тема для меня новая. Несколько моментов, которые хотелось бы уточнить
Осваиваю контроллеры ПЛК Mitsubishi. Конкретно, MELSEC iQ-F Series iQ Platform-compatible PLC Тема...

Добрый день, читал на хабре про АВЛ-деревья и хотелось бы кое-что уточнить
Добрый день, читал на хабре про АВЛ-деревья и возник один вопрос вот ссылка на статью...

Объясните некоторые моменты из c++
Добрый день. Я хочу начать познавать сие творение, т.к. 1 семестр на первом курсе 3 года назад...

10
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
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);
1
34 / 34 / 9
Регистрация: 19.03.2010
Сообщений: 136
22.03.2010, 01:25  [ТС] 3
парочку задачек элементарных не подскажешь? Чтоб руку набить, если не сложно.
Предельно понятно спс.
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
22.03.2010, 01:35 4
Fafle, в этой ветке любая задача на массивы или расчет функции, берите и решайте. И себе опыт и другим помощь
0
Day
1179 / 989 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
22.03.2010, 10:34 5
Небольшое, но, возможно, полезное пояснение.
Цикл while может и не выполниться не разу, если его условие сразу неверно.
(сначала "меряем" потом "режем")
цикл do - while обязательно выполнится хотя бы один раз
(сначала "режем", потом "меряем")
Тоже самое, но чуток другими словами.
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 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 << ' ';
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
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 минуту
Поэтому вопрос какой вариант цикла выбирать немного бессмысленный.
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 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;
    }
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
23.03.2010, 10:38 9
Мне почему-то кажется, что вот в таком моменте цикл while эффективнее
Эффективность кода оценивается не на глазок, а тестами, изучением какой код в ASM-е генерится и проверкой что быстрее работает.
ну или как минимум симпатичнее
Если кажется что симпатичнее - используй такой вариант.
0
Day
1179 / 989 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
23.03.2010, 10:58 10
odip,
Можно всегда использовать цикл for.
Можно вообще обойтись без циклов, используя только if и goto
На ASM это и в самом деле будет так.
Дело-то в выразительности и понятности конструкции...
И тут слово "симпатичнее" вполне уместно.
0
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
23.03.2010, 12:28 11
сам фор использую для счетчика,или заполнения массивов...ду-вайл хорош тем что полюбому один раз тело работает.Даже если условие не истенно
0
23.03.2010, 12:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.03.2010, 12:28
Помогаю со студенческими работами здесь

Проясните некоторые моменты
Читал книгу, но не все уяснил... 1. В каких конкретно случаях нужно писать writeln и readln...

Не могу понять некоторые моменты
Пожалуйста, объясните на пальцах вот эти вещи: В чем разница интерфейсов Comparator и Comparable?...

Некоторые моменты в индексации сайта
Здравствуйте. У меня в процессе разработки сайта возник кое-какой вопрос, связанный с его...

Объясните некоторые моменты в задаче
Здравствуйте, вот мне накинули задачу Пользователь вводит число А не более 4-х разрядов. Вывести...


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

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