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

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

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2011, 19:08   #21
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от ITTI Посмотреть сообщение
как догоните, скажите
Я догнал, что дальше делать?
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 23.12.2011, 19:10   #22
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от ITTI Посмотреть сообщение
я на четвертой главе. у меня как раз времени мало, читайте, пробуйте, как догоните, скажите. тут как раз интересное начинается. уже есть вопросы и сомнения) жду.
Книгу не читал, но считай, что уже догнал. Что за вопросы, Кэп?
_Bers вне форума Ответить с цитированием
Старый 23.12.2011, 19:47   #23
ITTI
Пользователь
 
Регистрация: 19.12.2011
Сообщений: 65
По умолчанию

глава 4, упр.4.
Код:
int a; char c;
    int left=0, right=100, middle, ok;
     while (a) {
          middle = (left + right) / 2;
          cout << "a >= " << middle << "?\n";
          cin >> c;
          if (c == 'y') {left = middle; 
                         if (right - left <= 1){ 
                         cout << "a = " << right << "?\n";
                         cin >> c;
                         if (c == 'y') {ok=right; break;}
                         else {ok=left; break;}}}

          else right = middle;}
делает лишний круг. почему?
как можно вообще по другому сделать?

Последний раз редактировалось ACE Valery; 26.12.2011 в 17:48.
ITTI вне форума Ответить с цитированием
Старый 23.12.2011, 21:55   #24
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Ну во-первых:

Код:
int a; char c;
int left=0, right=100, middle, ok;
while (a) {  //какое значение содержит переменная, в самом начале цикла?
middle = (left + right) / 2;
cout << "a >= " << middle << "?\n";
cin >> c;
if (c == 'y') {left = middle; 
if (right - left <= 1){ 
cout << "a = " << right << "?\n";
cin >> c;
if (c == 'y') {ok=right; break;}
else {ok=left; break;}}}

else right = middle;}
Во-вторых, во всем цикле флаг a нигде никак не меняется. Зачем он тогда вапще нужен? Выход из цикла, везде - брейки
_Bers вне форума Ответить с цитированием
Старый 23.12.2011, 22:08   #25
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Цитата:
Я догнал, что дальше делать?
2Blade
Хорош стебаться!
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 24.12.2011, 00:16   #26
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

А ничего так, что переменная a без инициализации используется?
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 24.12.2011, 00:22   #27
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Ну как бы нулём по дефолту должна инициализироваться! (повторяю должна, но не обязана)
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 24.12.2011, 00:23   #28
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Вовсе не должна, ибо не глобальная.
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 24.12.2011, 00:36   #29
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Сtrl Посмотреть сообщение
Вовсе не должна, ибо не глобальная.
Глобальная тоже не должна. Инициализация по дефолту - пустой конструктор. Имя переменной тупо знает адрес своей ячейки, и все.

Глобалы по дефолту нулями заполнены не потому, что у них какой то особый глобальный конструктор присутствует, а потому что сама по себе статическая память по дефолту заполнена нулями.
_Bers вне форума Ответить с цитированием
Старый 24.12.2011, 00:44   #30
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

_Bers, вы не правы. Смотрите пункт 3.6.2/1 стандарта C++. Там написано:
Цитата:
Objects with static storage duration (3.7.1) shall be zero-initialized (8.5) before any other initialization takes place.
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PopupMenu со мной не дружит Жигилий_Ульяна Компоненты Delphi 5 25.12.2008 11:04
проблемы с select или со мной... smoke888 JavaScript, Ajax 2 23.09.2008 19:02