Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2009, 15:56   #1
Guguzjaka
 
Регистрация: 27.11.2009
Сообщений: 6
По умолчанию Цикл в цикле и циклом погоняет...

Код:
# include <iostream>
# include <math.h>

using namespace std;
int main()
{
  char KEY;
  while(KEY!='Y')
  {
    char y;
    while(y!='Y')
    {
      double a = 0;
      double b = 0;
      double c = 0;
      cout << "Вычисление логарифма\n";
      cout << "Введите основание логарифма ";
      cin >> a;
      cout << "Введите число ";
      cin >> b;
      c = log(b)/log(a); //вычисление логарифма с произвольным основанием и произвольным числом.
      cout << "Ваш результат: " << c;
      cout <<"\n";
      cout << "Хотите закончить алгоритм? (Y/N)";
      cin >> y;
    }
    char x;
    while(x!='Y')
    {
      double a = 0;
      double b = 0;
      double c = 0;
      cout << "Вычисление корня\n";
      cout << "Введите число под корнем ";
      cin >> a;
      cout << "Введите степень корня ";
      cin >> b;
      c = pow(a,1/b); //вычисление корня с произвольным числом, под ним и произвольной степенью корня
      cout << "Ваш результат: " << c;
      cout <<"\n";
      cout << "Хотите закончить алгоритм? (Y/N)";
      cin >> x;
    }
    cout << "Выйти из программы? (Y/N)";
    cin >> KEY;
  }
return 0;
}
Вот такая себе программка, которая в общем-то работает нормально, кроме завершения последнего цикла.
Если на вопрос
Код:
 cout << "Выйти из программы? (Y/N)";
ответить "нет", то цикл
Код:
while(KEY!='Y')
выполняется снова, но переходит сразу к тому же вопросу
Код:
 cout << "Выйти из программы? (Y/N)";
В чём ошибка, почему программа не хочет выполнять вложенные циклы снова?
Guguzjaka вне форума Ответить с цитированием
Старый 27.11.2009, 16:08   #2
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Это значило написала не то что надо.
Опишите как Вы выходите из программы. У меня работает нормально. Y и N ввожу с учетом регистра.
Неприятности приходят и уходят, а жизнь продолжается!

Последний раз редактировалось Sweta; 27.11.2009 в 16:35.
Sweta вне форума Ответить с цитированием
Старый 27.11.2009, 16:21   #3
Guguzjaka
 
Регистрация: 27.11.2009
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Sweta Посмотреть сообщение
Стерла сама.
И что бы это значило?
Guguzjaka вне форума Ответить с цитированием
Старый 27.11.2009, 16:49   #4
Guguzjaka
 
Регистрация: 27.11.2009
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Sweta Посмотреть сообщение
Это значило написала не то что надо.
Опишите как Вы выходите из программы. У меня работает нормально. Y и N ввожу с учетом регистра.
Да выхожу-то я из программы просто, нажатием на клавишу Y.
Но меня не это интересует вовсе. Меня интересует не выход, а вход на повторный цикл, который выполняется не верно.
Вот моё видение программы:
Входим в цикл
Код:
while(KEY!='Y')
;
Входим в цикл
Код:
while(у!='Y')
;
Выполняем описанные действия и завершаем цикл нажатием на клавишу Y или остаёмся в цикле и выполняем снова действия нажав на любую другую клавишу;
Допустим мы нажали Y;
Входим в цикл
Код:
while(х!='Y')
;
Выполняем описанные действия и завершаем цикл нажатием на клавишу Y или остаёмся в цикле и выполняем снова действия нажав на любую другую клавишу;
Допустим мы нажали Y;
Выполняется следующий код:
Код:
cout << "Выйти из программы? (Y/N)";
    cin >> KEY;
Если мы жмём НЕ Y, то мы должны повторно выполнить всё то, что я описал выше, а в реале я снова выхожу сюда же:
Код:
cout << "Выйти из программы? (Y/N)";
    cin >> KEY;
И так длится до тех пор пока я не ввиду Y, в этом случае я просто выйду из программы.
Может быть это только у меня так работает? Тогда почему?
Guguzjaka вне форума Ответить с цитированием
Старый 27.11.2009, 16:56   #5
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Работает все правильно как заложили в программе.
Исправте
Код:
 char y='N';
  char x='N';
Т.К. когда Вы ввели Y при выходе из алгоритма оно там и осталось навеки..
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 27.11.2009, 18:17   #6
Guguzjaka
 
Регистрация: 27.11.2009
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Sweta Посмотреть сообщение
Работает все правильно как заложили в программе.
Исправте
Код:
 char y='N';
  char x='N';
Т.К. когда Вы ввели Y при выходе из алгоритма оно там и осталось навеки..
Да, спасибо это помогло.
Честно говоря я и сам так думал, просто не было возможности проверить, был в пути...
Только вот домой приехал, увидел Ваше сообщение и заодно проверил свою мысль и о чудо! всё работает чётко.
Есть ещё один вопрос, если позволите.
Принципиально ли ставить ";" в конце циклов
Код:
while(y!='Y')
и
Код:
while(х!='Y')
Просто много видел примеров и тут, кстати, пробовал ставить, но разницы не увидел, может быть это как-то хитро оптимизирует код?
Объясните по подробней кто знает и кому не лень, пожалуйста, если можно на этом примере.
Спасибо.
Guguzjaka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цикл по времени - Как сделать так чтобы цикл выполнялся к примеру 10 секунд ? Anarki Общие вопросы C/C++ 3 13.11.2009 19:23
Составить программу вычисления значений функций, используя приём "цикл в цикле" Chaynik011091 Помощь студентам 5 22.06.2009 21:33
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) Mr.User Помощь студентам 9 23.11.2007 01:34