Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Не могу понять в чем дело.  (Прочитано 12727 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Terabaytus
Интересующийся

ru
Offline Offline
Пол: Мужской
Через терни к звездам.


« : 12-08-2012 15:35 » 

Читаю Стивина Прата вот листинг приведенный в его книге
Код: (C++)
#include "stdafx.h"
#include <iostream>
using namespace std;
void showmenu () ; // прототипы функций
void report () ;
void comfort () ;
int main ()
{
showmenu () ;
int choice;
cin >> choice ;

while (choice != 5)

switch (choice )
{
case 1: cout << "\a\n" ;
break;
case 2: report () ;
break;
case 3: cout << "The boss was in all day. \n" ;
break;
case 4: comfort () ;
break;
default: cout << "That ' s not а choice .\n" ;
showmenu () ;
cin >> choice ;
cout << "Bye!\n" ;
return 0;
}
}
void showmenu ()
{
cout << "Please enter 1, 2, 3, 4, or 5:\n"
"1) alarm 2) report \n"
"3) alibi 4) comfort \n"
"5) quit\n ";
};
void report ()
{
cout << "I t's been an excellent week for business .\n"
"Sales are up 120% . Expenses are down 35% .\n" ;
};
void comfort ()
{
cout << "Your employee s think you are the finest CEO\n"
"in the industry . The board of directors think\n"
"you are the finest СЕО in the indus try . \n" ;
}
При его его выполнении работает не корректно, выбираешь любое действие и оно зацикливается такое впечатление, что оператор break игнорируется компилятором, но самое интересное загружал его в visual C++ 2008 почти все нормально, а в visual C++ 2010 происходит выше описанная хрень, в чем может быть дело Не понял
« Последнее редактирование: 12-08-2012 16:58 от Finch » Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 12-08-2012 17:02 » 

А где в swicth определение, как реагировать на 5 пункт меню?
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Terabaytus
Интересующийся

ru
Offline Offline
Пол: Мужской
Через терни к звездам.


« Ответ #2 : 12-08-2012 17:30 » 

Вводя 5, прога выводит Bye и закрывает консоль. Именно так написано в книге и именно так было в visual C++ 2008.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 12-08-2012 17:38 » 

Если в книге именно такой код, то книгу надо на помойку сразу.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #4 : 12-08-2012 17:40 » 

Код:
default: cout << "That ' s not а choice .\n" ;
showmenu () ;
cin >> choice ;
cout << "Bye!\n" ;
return 0;
При коде 5, у тебя будет выполняться данная ветка. Где правильность логики? Кстати при вводе 6 таже самая ветка будет работать.

Добавлено через 3 минуты и 20 секунд:
Dimka, Я встречал много толковых книг, где были ошибки в коде. Наверно специально туда вставляются. Чтоб читатель думал Улыбаюсь
« Последнее редактирование: 12-08-2012 17:43 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Terabaytus
Интересующийся

ru
Offline Offline
Пол: Мужской
Через терни к звездам.


« Ответ #5 : 12-08-2012 18:29 » 

Да издание Прата Лекции и упражнения грешит опечатками я как начинающий и то это замечаю, это скорей проблемы перевода, но остается вопрос почему в разных студиях по разному работает?
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #6 : 12-08-2012 18:33 » 

Тут склорее всего дело не в студии, а в оптимизации. Компилируй и исполняй в Debug режиме.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 12-08-2012 20:31 » 

Finch, да причём тут ошибки. Ты на main посмотри, на цикл, на сам подход к структуризации кода - это же ужас, почти "спагетти" с точки зрения control flow. Либо в книжке всё же не совсем так, и мы видим код преимущественно автора темы - начинающего, либо книжку на помойку.

Оно мало того, что по всем кроме 1-4 выйдет, так ещё и зациклится насмерть при 1-4.

P.S. А вообще хорошая книжка содержит правильный пример без ошибок и несколько упражнений, в том числе и вида "найди ошибку".
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #8 : 12-08-2012 20:53 » 

Насчет зацикливания, я даже не обратил внимание. Тогда понятно, почему оптимизатор так играется Улыбаюсь
Наши процессоры настолько быстры, что даже бесконечный цикл выполняют за 2 секунды (c) Sun Inc.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 13-08-2012 05:40 » 

Правильный control flow будет:
Код: (C++)
int choice;
do
{
   showmenu();
   cin >> choice;
   switch(choice)
   {
   case 1:
      cout << "bla-bla-bla" << endl;
      break;
   case 2:
      report();
      break;
   case 3:
      cout << "bla-bla-bla" << endl;
      break;
   case 4:
      comfort();
      break;
   case 5:
      cout << "Bye!" << endl;
      break;
   default:
      cout << "Invalid choice" << endl;
   }
}
while(choice != 5);
Минимум кода, и очевидно, что куда следует.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Terabaytus
Интересующийся

ru
Offline Offline
Пол: Мужской
Через терни к звездам.


« Ответ #10 : 13-08-2012 08:34 » 

Спасибо за код и ответы. Все разобрался косяк за мной все дело оказалось в расстановке фигурных скобок недоглядел. Потому и в студиях разность получилась, в одной код был правильно написан в другой нет. У меня другой вопрос кто ни будь может мне объяснить как можно в консоли заставить в вращаться геометрическую фигуру желательно с простеньким примером?

Код: (C++)
#include "stdafx.h"
#include <iostream>
using namespace std;
void showmenu () ; // прототипы функций
void report () ;
void comfort () ;
int main ()
{
showmenu () ;
int choice;
cin >> choice ;
while (choice != 5)
{
switch (choice )
{
          case 1: cout << "\a\n" ;
break;
          case 2: report () ;
break;
          case 3: cout << "The boss was in all day. \n" ;
break;
         case 4: comfort () ;
break;
          default: cout << "That ' s not а choice .\n" ;
}
showmenu () ;
cin >> choice ;
}
cout << "Bye!\n" ;
return 0;
}

void showmenu ()
{
cout << "Please enter 1, 2, 3, 4, or 5:\n"
"1) alarm 2) report \n"
"3) alibi 4) comfort \n"
"5) quit\n ";
};
void report ()
{
cout << "I t's been an excellent week for business .\n"
"Sales are up 120% . Expenses are down 35% .\n" ;
};
void comfort ()
{
cout << "Your employee s think you are the finest CEO\n"
"in the industry . The board of directors think\n"
"you are the finest СЕО in the indus try . \n" ;
}
« Последнее редактирование: 13-08-2012 08:39 от Вад » Записан
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 13-08-2012 08:40 » 

Terabaytus, что значит "в консоли" и "геометрическую фигуру"? Фигура сама по себе, консоль сама по себе. Рассчитываешь положение фигуры, рисуешь. Положение поменялось - пересчитал, перерисовал. Первая часть задачи сугубо на геометрию, а вторая - исключительно вопрос представления ("рисования") фигуры теми или иными средствами.
Записан
Terabaytus
Интересующийся

ru
Offline Offline
Пол: Мужской
Через терни к звездам.


« Ответ #12 : 13-08-2012 08:56 » 

Видимо у нас разное представление поправьте если я ошибаюсь, для меня консоль это черное окошко в которое компилятор выводит результаты написанного мой кода. Так вот я рисую с помощью символов(0,1) фигуру и хочу чтобы она вращалась по часовой стрелке как это можно осуществить по координатам до этого я дойти не могу для этого и прошу пример, но то что ее можно перерисовать каждый  сдвиг а потом выводить эти рисунки на экран друг за другом (как на страницах бумажного блокнота )  это мне ясно.   
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 13-08-2012 11:52 » 

Terabaytus, как сказал Вад, такие задачи решаются декомпозицией по частям.

1) Математическая модель фигуры. Какая именно фигура, какими точками, отрезками, кривыми она должна представляться? Где центр вращения в так называемых мировых координатах? Какой код написать, чтобы все точки фигуры поворачивались в нужную тебе сторону относительно центра вращения?

2) Как фигура должна рисоваться на экране. Это какие-то линии. (Текстур у тебя, похоже, не будет.) Каково разрешение экрана? (У консоли это обычно 80х25 или 80х50 позиций.) Как выводятся пикселы? В простейшем случае это будет символ заливки. В более сложном, исходя из анализа соседних символов подбирается символ псевдографики или алфавитно-цифровой, чтобы картина смотрелась чётче. С алгоритмом такого анализа и подбора нужно определиться, если пойти более сложным путём. Как отобразить мировую систему координат в экранную (какие масштабные коэффициенты, как повёрнуто и смещено начало координат - обычно в левом верхнем углу, а ось Y направлена вниз)?

3) Как организовать вывод и анимацию? Если консоль работает в телетайпном режиме, то нужно составить алгоритм заполнения экрана символами, и организовать поток сменяющих друг друга экранов. Если консоль работает в программируемом режиме (с перемещением курсора и сменой цветов), то организовать циклическую очистку экрана и отрисовку очередного кадра.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Terabaytus
Интересующийся

ru
Offline Offline
Пол: Мужской
Через терни к звездам.


« Ответ #14 : 13-08-2012 16:01 » 

Вот вот с третьим пунктом мне все ясно в этом направлении я и буду двигаться, а еще вопрос, что нужно сделать с кодом или дописать в нем, что бы скрыть от посторонних глаз, если возможно я это представлю себе в виде exe файла на который кликаешь и код начинает работать?
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #15 : 13-08-2012 17:55 » 

Terabaytus, что именно скрыть? и от чьих конкретно глаз? какого события не должно быть в результате?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #16 : 13-08-2012 18:35 » 

Ключевая фраза:
если возможно я это представлю себе в виде exe файла на который кликаешь и код начинает работать?

Terabaytus, внимательно изучи папку проекта: структуру, подструктуру и файлы, особенно те, которые генерятся студией.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Terabaytus
Интересующийся

ru
Offline Offline
Пол: Мужской
Через терни к звездам.


« Ответ #17 : 14-08-2012 16:48 » 

Все ясно спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines