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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Viktor_Repin
1 / 1 / 0
Регистрация: 26.08.2011
Сообщений: 21
Завершенные тесты: 1
#1

if или while? - C++

04.11.2012, 09:39. Просмотров 471. Ответов 9
Метки нет (Все метки)

разбирая очередной урок по книге Шилдта решил попробовать заменить if на while, но почему-то во втором случае программа зацикливается!
Кто может объяснить в чём причина?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <cstdlib>
 
 
void reverse (char *s);
 
void main() 
{
    setlocale( LC_ALL,"Russian" );
    char str[] = "Это просто тест";
 
    reverse (str);
    std::cout << " " << std::endl;
    system("pause");
}
 
void reverse (char *s){
    if (*s) 
        reverse(s+1);
    std::cout << *s;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2012, 09:39     if или while?
Посмотрите здесь:

Имеет ли смысл продолжать учить с++ или попробовать перейти в с# или java? - C++
Надеюсь данный вопрос не нарушает правила этого раздела. Учу кресты уже месяца полтора-два. Это мой первый ЯП. По 2-7 часов в день. В...

Написать программу вычисления площади треугольники или квадрата или трапеции - C++
написать программу вычисления площади треугольники или квадрата или трапеции в соответствии с выбором пользователя с использованием меню!

Количество нулевых, или положительных, или отрицательных элементов в двумерном массиве - C++
Здравствуйте. Мне нужно составить программу, которая подсчитывает или количество нулевых, или количество положительных, или количество...

Книги или справочники для опытных(или проффесиональных) программистов! - C++
Пожалуйста, Подскажите книги или справочники для опытных и проффесиональных программистов! Особенно хотелось бы найти: 1) полный...

Контроль точности Рунге-Кутта (3 или 4 порядка) или Эйлера. - C++
Вопрос таков, как можно контролировать точность в Рунге-Кутта 3 или Рунге-Кутта 4 порядка. Или в методе Эйлера. Искал в интернете и...

Придумать и описать создание списка или стека или очереди. И работу с ними. - C++
Помогите пожалуйста. Придумать и описать структуру некоторого сюжета (не менее пяти полей) и составить программу для создания массива...

При вводе элементов массива выводить их тип (или int или float) - C++
Помогите с ошибкой, и если не сложно то с заданием а то я вроде сделал только не могу проверить так как крешит прогу( А задание...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
13049 / 7312 / 814
Регистрация: 27.09.2012
Сообщений: 18,047
Записей в блоге: 3
Завершенные тесты: 1
04.11.2012, 10:00     if или while? #2
и где здесь while?
Артем Смирнов
6 / 6 / 1
Регистрация: 15.05.2012
Сообщений: 40
04.11.2012, 10:21     if или while? #3
Viktor_Repin, Вы разобрались в программе? Как же здесь можно заменить for на while? Это же рекурсия, каждый раз функция reverse вызывает копию самой себя, до тех пор, пока в одной из копий (самой последней) условие конца строки не даст истину. После этого рекурсия будет "раскручиваться" и копии функции будут печатать символы строки в обратном порядке. Если заменить if на while то функция просто будет выполняться бесконечно.
Viktor_Repin
1 / 1 / 0
Регистрация: 26.08.2011
Сообщений: 21
Завершенные тесты: 1
04.11.2012, 10:26  [ТС]     if или while? #4
Это я всё понял, но объясните, если не трудно, почему в случае с рекурсией while не работает?
Артем Смирнов
6 / 6 / 1
Регистрация: 15.05.2012
Сообщений: 40
04.11.2012, 10:33     if или while? #5
Как он может работать то?)) Цикл while будет выполняться пока не обнаружен конец строки, то есть бесконечно, ибо указатель s не изменяется, и никогда не станет ложью условие продолжения
Croessmah
Модератор
Эксперт CЭксперт С++
13049 / 7312 / 814
Регистрация: 27.09.2012
Сообщений: 18,047
Записей в блоге: 3
Завершенные тесты: 1
04.11.2012, 10:38     if или while? #6
Цитата Сообщение от Viktor_Repin Посмотреть сообщение
Это я всё понял, но объясните, если не трудно, почему в случае с рекурсией while не работает?
так работает:
C++
1
2
3
4
5
6
7
void reverse (char *s){
    static char *s1=s;
    while(*s1){
        reverse(++s1);
        std::cout << *s;
     }
}
У Вас в самом цикле значение s не изменяется, поэтому цикл будет бесконечным, если в строке есть хоть один символ, отличный от '\0'
Артем Смирнов
6 / 6 / 1
Регистрация: 15.05.2012
Сообщений: 40
04.11.2012, 10:38     if или while? #7
C++
1
2
3
4
5
6
void reverse (char *s){
    while (*s) {
        reverse(s+1);
        std::cout << *s; 
        s++;
}
Вот если так, то цикл закончиться, потому что, когда дойдем до конца строки цикл while прекратиться, но при этом результаты все равно будут некорректными, потому что прежде чем закончиться он вызовет ненужных 15 (по числу символов в строке) "копий" функций, те в свою очередь вызовут еще, и т.д.
Croessmah
Модератор
Эксперт CЭксперт С++
13049 / 7312 / 814
Регистрация: 27.09.2012
Сообщений: 18,047
Записей в блоге: 3
Завершенные тесты: 1
04.11.2012, 10:53     if или while? #8
Можно так сделать
C++
1
2
3
4
5
6
void reverse (char *s){
    char *s1=s+strlen(s);
    while(s1--!=s){
        std::cout << *s1;
     }
}
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
04.11.2012, 11:43     if или while? #9

Не по теме:

Я нассал в бензобак, а машина почему-то не завелась. Кто может объяснить в чём причина?



Как бы for и while взаимозаменяемые, но никак не if и while.
Если уж прям невмоготу, то вот эквивалент:
C++
1
2
3
4
5
6
while( условие )
{
   // говнокод
 
   break;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.11.2012, 13:07     if или while?
Еще ссылки по теме:

Вложенные CMap или CArray-объекты. Ошибка компилятора или неправильная работа. - C++
Имеется: struct OPER { CString name; //название CString symbol; //обозначение };

Создать программу при нажатии на кнопку м или ж выводились муржской или женский пол. - C++
Создать программу при нажатии на кнопку м или ж выводились муржской или женский пол.

Как найти текст в файле и возвратить 0 или 1 в зависимости от того,найдено или нет? - C++
bool fnd(char* fn,string stf) { string s; ifstream ifs(fn); while (!ifs.eof()) { getline(ifs,s); ...

Или я дурак или лыжи не едут, склоняюсь к первому. - C++
говорит необъявленный идентификатор относительно всех функций класса notebook. Пробовал все конструкторы методов перекинуть в хедер эффект...

При вводе того или иного пароля открывать тот или иной txt-файл - C++
Добрый вечер. Нужно написать программу, которая будет при вводе того или иного пароля открывать тот или иной .txt файл. Например: ...


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

Или воспользуйтесь поиском по форуму:
Viktor_Repin
1 / 1 / 0
Регистрация: 26.08.2011
Сообщений: 21
Завершенные тесты: 1
04.11.2012, 13:07  [ТС]     if или while? #10
Спасибо за помощь! Совсем меня рекурсия в заблуждение ввела :-)
Yandex
Объявления
04.11.2012, 13:07     if или while?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru