Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на C/С++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322

Открыть новую тему     Написать ответ в эту тему

Crazy_Shrike



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вопросы по программированию на C/С++

 
  • Справочники, книги
  • Выбор IDE (среды программирования)
     
    Постарайтесь дать как можно больше информации о возникшей проблеме - это в конце концов в ваших же интересах чтобы вам помогли.

    Решения конкретных задач собираются и обсуждаются в теме Задачи по C/С++ .

    Прежде чем просить помощи в задании...
    Если позарез надо и вы даже готовы заплатить

    Как правильно задавать вопросы, если вы хотите получить ответ.

    Полезные ссылки:
    C++(eng)

  • Всего записей: 241 | Зарегистр. 25-03-2004 | Отправлено: 13:37 06-05-2004 | Исправлено: AZJIO, 19:45 12-05-2014
    RedLord

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Qraizer
    Спасибо
     

    Цитата:
    Другое дело, если метод имеет модификатор const и вызывается с константным экземпляром...

     
    а если есть mutable-мемберы? похоже и для const объектов (с mutable) поведение не должно отличаться

    Всего записей: 730 | Зарегистр. 05-03-2004 | Отправлено: 17:17 23-04-2007 | Исправлено: RedLord, 18:16 23-04-2007
    Qraizer



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    mutable-мемберы по определению неконстнтные. Но только они. Если сам экземпляр константен, то на методе, который не задействует mutable-элементы, их наличие никак не должно сказаться. Хотя это уже моё ИМХО - гарантировать, что именно так и будет, не могу.
    xdude
    Могу посоветовать попробовать такой код. Должен помочь, но это только с точки зрения стандарта. Если компилятор его не слушается, то уж звиняй.
    Код:
    std::vector<std::string>::size_type size(volatile std::vector<std::string>& v)
    {
     return const_cast<std::vector<std::string>&>(v).size();
    }
    Всё ж таки попроще, чем агрегировать вектор в своём классе. Можешь для пущей важности добавить volatile к возвращаемому значению, чтоб компилятор не сомневался, что это "изменчивое" значение.

    Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 16:01 24-04-2007 | Исправлено: Qraizer, 16:03 24-04-2007
    RedLord

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Qraizer

    Цитата:
    mutable-мемберы по определению неконстнтные

    это понятно.
     

    Цитата:
    то на методе, который не задействует mutable-элементы, их наличие никак не должно сказаться

    похоже да:
     

    Цитата:
     
     
    7.1.1 Storage class specifiers
    9 The mutable specifier on a class data member nullifies a const specifier applied to the containing class
    object and permits modification of the mutable class member even though the rest of the object is const
    (7.1.5.1)
     

     
    xdude
    можно еще так:
     

    Код:
     
    template <class _Tp> struct Wrap
    {
    _Tp& get() volatile
    {
    return (*m_p);
    }
     
    _Tp* volatile m_p;
    };
     

    по идее, то что m_p есть volatile-указатель на _Tp должно подавить оптимизацию.

    Всего записей: 730 | Зарегистр. 05-03-2004 | Отправлено: 16:37 24-04-2007 | Исправлено: RedLord, 16:38 24-04-2007
    Qraizer



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    volatile будет сам указатель. Я не уверен, что это побудит оптимизатор каждый раз его разыменовывать. Впрочем, возможно ты и прав...

    ----------
    Одни с годами умнеют, другие становятся старше.

    Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 15:07 25-04-2007
    RedLord

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Qraizer

    Цитата:
    volatile будет сам указатель

    да и любое обращение через такой указатель должно давить оптимизацию (ИМХО)

    Всего записей: 730 | Зарегистр. 05-03-2004 | Отправлено: 16:42 25-04-2007
    HelL_Doctor



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Hi, all! Подскажите пожалуйста, как на Си реализвоать доступ к ФАТ таблице диска, т.е. удаление/добавление в нее новых элементов? буду премного блгодарен! )

    Всего записей: 67 | Зарегистр. 30-11-2004 | Отправлено: 20:10 25-04-2007
    rain87



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    HelL_Doctor
    если вин98 или дос - то 13 интом
    если нт - http://forum.ru-board.com/topic.cgi?forum=33&topic=7977#1

    Всего записей: 1744 | Зарегистр. 21-06-2006 | Отправлено: 21:20 25-04-2007
    HelL_Doctor



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    И еще один вопрос, как реализовать на СИ просмотр папки, без использование АПИ функций?

    Всего записей: 67 | Зарегистр. 30-11-2004 | Отправлено: 22:27 25-04-2007
    Lyrik

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    HelL_Doctor
    найти доку по ФС, которую юзаешь и написать ручной обход

    Всего записей: 388 | Зарегистр. 04-04-2006 | Отправлено: 00:28 26-04-2007
    NNS



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите плиз, как мне объявить динамический массив, который бы был виден во всех функциях? В самом классе объявить нельзя, а нужно, что б этот массив был доступен и обрабатывался в нескольких функциях.

    Всего записей: 137 | Зарегистр. 03-01-2005 | Отправлено: 20:54 26-04-2007
    RedLord

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NNS
    чего-то не понял. объявить или определить?
     
    если определить
     
    test.h
     
    typedef std::vector<int> IntVec;
    extern IntVec my_data;
     
    --------------
    test1.cpp
     
    #include "test.h"
     
    IntVec my_data; // определяется в одном месте
     
    void foo()
    {
    my_data.clear();
    }
     
    ----------------
    test2.cpp
     
    #include "test.h"
     
    void foo()
    {
    my_data.clear();
    }

    Всего записей: 730 | Зарегистр. 05-03-2004 | Отправлено: 21:24 26-04-2007 | Исправлено: RedLord, 21:30 26-04-2007
    NNS



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    RedLord
    Я имел ввиду создание динамического массива припомощи оперетора  new.
     
    Еще вопрос, у меня есть стринговский массив Bol, в который из файла считываются данные. В другом классе (классе окна) есть переменная m_combo, которая связанна с элементом combobox, я пытаюсь заполнить комбобокс инфой из этого массива.
     
    CDlg cdlg;
    m_combo.AddString(cdlg.Bol[1]);
     
    Но это не работает...

    Всего записей: 137 | Зарегистр. 03-01-2005 | Отправлено: 16:46 27-04-2007
    GOGACL

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Народ помогите!
    Никак не ойму как рекурсия работает
    Прошу обяснить прямо на пальцах, а то уже голова дымит.
    можно на своих примерах, а можно на этом
     
    #include <iostream.h>
     
    int mys(int, int);
     
    main()
    {
        int a, b;
        
        cout << "Vvedite 2 chisla: ";
        cin >>a >> b;
        
        cout << "Rezultat raven " << mys(a, b) << endl;
        return 0;
    }    
     
        int mys(int x, int y)
        {    
        if (y==1)  
            return x;
        else
            return x+mys(x,y-1);
        }
     
    это из учебника дейтела

    Всего записей: 62 | Зарегистр. 20-10-2006 | Отправлено: 15:17 28-04-2007
    veronica b



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    GOGACL, я немножко подправил вашу программу, так ка в ней была принципиальная ошибка

    Цитата:
    это из учебника дейтела


    Цитата:
    #include <iostream.h>
     
    int mys(int, int);
     
    int main()
    {
         int a, b;
     
         cout << "Enter 2 numders: ";
         cin >>a >> b;
     
         cout << "Result equals " << mys(a, b) << endl;
     
         return 0;
    }
     
         int mys(int x, int y)
         {
         if(y <= 1)                                           // A
              return x;
         else
              return x + mys(x, y-1);       // B
        }  

     
    Самая важная строка в этой программе, это строка помеченаая В. В ней опять вызывается функция mys(int, int), но тут есть маленькая тонкость, второй аргумент уменшается на единицу.. Теперь смотрим строку, помеченой буквой А. Если второй аргумент меньше или равен 1, то нет вызова mys(int, int).Рекурсия закончилась.
    В исходной программе, при втором аргументе, имеющим отр.знач. рекурсия была бы бесконечной!
    В общем, в языке С и С++ не свойственно применение рекурсии. Если вам нравится рекурсия, то используйте Lisp и Prolog.

    Всего записей: 504 | Зарегистр. 04-12-2006 | Отправлено: 13:19 29-04-2007
    GOGACL

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    veronica b
    Чтобы рекурсия понравилась или нет ее нужно понять...
    сначала при входе в рекурсивную функцию идет вычисление всех аргументов, которые будут принимать участие в вычислении?

    Всего записей: 62 | Зарегистр. 20-10-2006 | Отправлено: 10:30 30-04-2007
    veronica b



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    GOGACL, при вызове рекурсивной функции идет вычисление аргументов, а рекурсивня функция всегда делает две вещи
    1. Проверяет условие выхода из рекурсии. См. строку А.
    2. Если условие выхода false, то происходит модификация хотябы одного из аргументов и вызов рекурсивной функции. См. строку В.
     

    Всего записей: 504 | Зарегистр. 04-12-2006 | Отправлено: 14:26 30-04-2007 | Исправлено: veronica b, 14:30 30-04-2007
    GOGACL

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    veronica b
    Но при создании аргументов при входе в функцию появляется один аргумент удовлетворяющий условию  if(y <= 1)   при котором функция должна завершится...
    При этом функция продолжает работать...

    Всего записей: 62 | Зарегистр. 20-10-2006 | Отправлено: 10:11 02-05-2007
    veronica b



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    GOGACL

    Цитата:
    При этом функция продолжает работать...

    В твоем листинге - да! В той программе, что я тебе дал, эта ошибка исправленна. Кто вам дал такое задание?  
     

    Всего записей: 504 | Зарегистр. 04-12-2006 | Отправлено: 21:27 02-05-2007
    GOGACL

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    veronica b
    Я пытаюсь понять как работают рекурсивные функции, а это просто пример такой функции и пока я в понимании не далеко продвинулся. Ведь есть задачи, которые проще решать с помощью рекурсивных функций..

    Всего записей: 62 | Зарегистр. 20-10-2006 | Отправлено: 13:47 03-05-2007
    Qraizer



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    А в чём собственно непонимание заключается-то? Рекурсивные функции ничем не отличаются от нерекурсивных. Подумаешь - сами себя вызвают, ну и что из этого? Вызов, он и есть вызов. "Функция f1 вызывает функцию f2." Здесь непонимания нет? Тогда в чём проблемы с "функция f1 вызывает функцию f1"?

    Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 19:09 03-05-2007
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на C/С++


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru