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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    SaDFromSpb



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    RedLord
    У нас с тобой просто путанница в понятниях.

    Цитата:
    ri = 2; // i стало равно 2
    i1 = 5; // i не изменилось.  


    Код:
    int i = 4;
    int& ri = i;
    // после этого на уровне кода никакой разницы между ri и i заметить не удастся (если удается - напиши как)
    ri = 45;
    cout << i << endl; // выводится 45. Проверь.
     


    Цитата:
    при push_back копирование идеть по значению:
    int i = 1;
    vec.push_beck(i);
    Полностью согласен. Идет копирование по значению, то есть, внутри метода push_back создается копия содержимого i.  
     
    Когда объявление int i = 4; переводится на уровень машинных кодов, то i переводится в адрес места в памяти, где хранится значение int. Любой адрес - это и есть ссылка на отрезок памяти. Другого способа хранения одиночных переменных нет.
    Если мы пишем int* i = new int(4);, то i переводится в адрес места памяти, где хранится адрес другого места в памяти, где уже хранится четверка.
    С этой точки зрения i в обоих случаях - прежде всего обычная переменная, просто в первом случае она хранит значение 4, а в другом случае она хранит адресс (который  по сути тоже принадлежит к типу unsigned int (для 32-х разрядной платформы) ).
     
    Для простоты понимания мы привыкли считать, что для выражения int i=4; верно, что в i просто содержится значение 4, хотя прежде всего i - это адрес (то есть ссылка на отрезок памяти), который можно узнать, написав cout << &i ; .
     
    Здесь я коротко изложил свое представление. И я не утверждаю, что оно верное. И вообще, мне действительно стоило перечитать про это у Страуструпа, прежде чем все это накалякать, просто времени не хвататет.
     
    Добавлено:
    Следовательно, когда я говорю, что контейнеры расчитаны на хранение ссылочных типов, и когда ты говоришь, что они рассчитаны на хранение значений, то мы оба имеем ввиду одно и тоже.
     
    Добавлено:
    Еще могу добавить:

    Код:
    int i = 4;
    int& ri = i;
    cout << &i << endl;
    cout << &ri << endl;
    //два раза выведется один и тот же адрес.

    Всего записей: 209 | Зарегистр. 22-06-2004 | Отправлено: 16:00 25-05-2006 | Исправлено: SaDFromSpb, 16:16 25-05-2006
    RedLord

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SaDFromSpb
     
    да разницы нет. ее на уровне машинного кода не будет если объявить ri указателем, т.к. большинство компилеров реализуют ссылку через указатель.

    Всего записей: 730 | Зарегистр. 05-03-2004 | Отправлено: 16:31 25-05-2006
    SaDFromSpb



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

    Цитата:
    большинство компилеров реализуют ссылку через указатель
    Хм.. не знал, кстати спасибо за ссылки на книжки. "Решение сложных задач на С++" у меня уже есть (купил совсем недавно)

    Всего записей: 209 | Зарегистр. 22-06-2004 | Отправлено: 16:43 25-05-2006
    WiseAlex



    Софтовых дел М...
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SaDFromSpb

    Цитата:
    специалmyst

    специальные (puntoswitcher подвел) - посмотри boost вроде были (не факт конечно)

    Всего записей: 1001 | Зарегистр. 02-03-2003 | Отправлено: 18:30 25-05-2006
    koderr



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Как сделать, чтобы функция _itoa из ntdll.dll переводила шестнадцатиричные числа в строку в верхнем регистре? Например, не 1f3d8d89, а 1F3D8D89.

    Всего записей: 353 | Зарегистр. 22-06-2005 | Отправлено: 18:37 27-05-2006
    SaDFromSpb



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    koderr
    Так есть же отедльная фукнция для перевода строки в верхний регистр. Почему ей не воспользоваться?

    Всего записей: 209 | Зарегистр. 22-06-2004 | Отправлено: 18:59 27-05-2006
    koderr



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    SaDFromSpb
    Некрасиво это - из-за каких-то 8 байт ЦЕЛУЮ функцию вызывать (шестнадцатиричное число - CRC32). Мне нужно вызвать ОДНУ функцию, чтобы перевести число в строку в верхнем регистре. wsprintf не предлагать!

    Всего записей: 353 | Зарегистр. 22-06-2005 | Отправлено: 19:24 27-05-2006
    SaDFromSpb



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

    Цитата:
    Некрасиво это - из-за каких-то 8 байт ЦЕЛУЮ функцию вызывать (шестнадцатиричное число - CRC32)
    . Времена, когда люди пробелы в конце строк убирали, чтобы компилилось быстрее, прошли. Сейчас больше всего ценится скорость разработки, а не "экономия на спичках" (конечно, если ты не пишешь драйвер или графический движок).
    Или у тебя это действие стоит в цикле, повторяющемся столько раз, что эту "некрасивость" можно заметить?
    Вобщем, это все оффтопик, про _itoa из ntdll.dll не знаю.
    И что значит (шестнадцатеричное число - CRC32) при обсуждении вызова функции?

    Всего записей: 209 | Зарегистр. 22-06-2004 | Отправлено: 01:07 28-05-2006 | Исправлено: SaDFromSpb, 01:11 28-05-2006
    0Vovan0



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Помогите с задачкой плиз!
    Ситуация такая - учусть на прогамера, первый курс, щас веселое время настало.. В общем по програмированию (Си) 17 лаб, здать надо, к каждой есть 30 вариантов, показан пример решения и т.п. Все лабы как лабы, ознакомление - от вывода строчки на экан до указателей. Ничего сложного в принципе нету, разобраться можно. Но с одной лабой, к-я еще и 4 по списку, большая трабла - просто не могу врубиться в суть вопроса, тольком ниче не обьяснили, учитель на практике особо не появляется, все кто уже сдали просто переделали решенный вариант под себя. Надеюсь что вы обьясните в чем суть, и мне так делать не придется.
    В общем задание:

    Цитата:
            Битовые операции
     
    Целью лабораторной работы является получение практических навыков в работе с побитовими логическими операциями и операциями сдвига языка C.  
     
             Задание для выполнения
    Составить две программы, первая из которых вводит составные части структуры данных, приведенной в Вашем варианте индивидуального задания, и формирует из них заданную упакованную структуру. Вторая программа вводит упакованную структуру как 16-ричное число и выводит значения отдельных ее составных частей.  
     
    Вариант &#9575;11
     
         Информация о состоянии устройства в системе ввода-вывода представляется в виде:  
     
    #разряда 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00  
    Значение  C  C   C  U  U   U   U  U  E   E   E   E   E   E  0  B  
     
    где: CCC - номер канала  
    U..U - номер устройства в канале  
    E..E - код состояния  
    B -  признак занятости устройства  
     

    Хотя бы обьясните, чего от меня в этом задании хотят?

    Всего записей: 2370 | Зарегистр. 15-07-2005 | Отправлено: 03:00 28-05-2006
    HANDLE

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    0Vovan0

    Цитата:
    #разряда 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00  
    Значение  C  C   C  U  U   U   U  U  E   E   E   E   E   E  0  B  
     
    где: CCC - номер канала  
    U..U - номер устройства в канале  
    E..E - код состояния  
    B -  признак занятости устройства  

     
    1  int C, U, E, B; // заданы
       int Pack =  (B & 1) | ((E & 0x3F)<<2) | ((U & 0x1F)<<8) | ((C & 0x07)<<13);
     
    2 int Pack; // задано
       int C = (Pack>>13) & 0x07;
       int U = (Pack>>8) & 0x1F;
       int E = (Pack>>2) & 0x3F;
       int B = Pack & 1;
     

    Всего записей: 364 | Зарегистр. 25-02-2006 | Отправлено: 09:58 28-05-2006
    0Vovan0



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    HANDLE
    Большое спасибо, но..
    Из твоего поста я понял как подогнать решенный вариант под себя, но толком не понял что делать.
    Если не в тягость, можно обьснить более доступным языком что значит эта инфармация о состоянии устройства и т.п. В чем вообще смысл этой программы? Поврторюсь еще раз, мы толком ничего не успели пройти, недавно сказали чтло по указателям лабюы делать не надо, так что обьем знаний невелик - тольком ничего и не прошли за семестр.

    Всего записей: 2370 | Зарегистр. 15-07-2005 | Отправлено: 04:48 29-05-2006
    Mickey_from_nsk

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    0Vovan0
    Многие устройства, подключенные к компьютеру достаточно медленные (или используют медленные интерфейсы типа COM). Многие (особенно промышленные) устройства по разрядности шин данный и прочим деталям не совпадают с PC. Часто встречаются ситуации, когда количество устройств на одной шине (одном контроллере) не должно превышать 2-4-8 штук, а количество команд для него тоже достаточно мало. Многие устройства используют старые, но широко используемые интерфейсы (типа SCSI), при разработке которых инженеры не могли себе позволить выделить по байту на каждое поле команды или данных.  
    В общем, куча причин, по которым требуется чтобы в одном байте или слове содержалось более одного параметра. Для этого применяется механизм упаковки.
    Делается это или как приведено выше, или через битовые поля, например так:

    Код:
     
    struct PackedInfo
    {
        int C : 3;
        int U : 5;
        int E : 6;
        int reserved : 1
        int B : 1;
    }
     
    ...
       PackedInfo pi = readPackedInfoStructure(...);
       cout << "C = " << pi.C << " U = " << pi.U << " E = " << pi.E << "B = " << pi.B << endl;
     

    Всего записей: 636 | Зарегистр. 21-10-2002 | Отправлено: 08:22 29-05-2006
    0Vovan0



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Mickey_from_nsk
    Вот как оно, спасибо, разьяснил

    Всего записей: 2370 | Зарегистр. 15-07-2005 | Отправлено: 02:41 30-05-2006
    AnGo



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Hi, All!
    Помогите разобраться с темплейтами.
    Этот код нормально работает под VC++, но надо чтобы работал и под BCB 6.
     
    template <class Type,class DataType2=NodeData<Type> > class Tree; (стр. 9)
     
    template <class Type> class NodeData
    {
    private:
    // тело класса
     
    };
     
     
    template <class Type,class DataType2=NodeData<Type> >  (стр. 35)
    class Tree : private Ref<DataType2>                                   (стр. 36)
        {
        typedef Ref<DataType2> NodeBase;
    public:
        typedef Tree<Type> Node;
    // тело класса
    };
     
    При компиляции под BCB жалуется на
     
    template <class Type,class DataType2=NodeData<Type> > class Tree;
     
      [C++ Error] tree.h(9): E2041 Incorrect use of default
      [C++ Error] tree.h(9): E2428 Templates must be classes or functions
      [C++ Error] tree.h(9): E2141 Declaration syntax error
      [C++ Error] tree.h(35): E2041 Incorrect use of default
      [C++ Error] tree.h(35): E2428 Templates must be classes or functions
      [C++ Error] tree.h(35): E2238 Multiple declaration for 'NodeData'
      [C++ Error] tree.h(9): E2344 Earlier declaration of 'NodeData'
      [C++ Error] tree.h(35): E2141 Declaration syntax error
     
    Ежели поступим следующим образом, сделаем предварительное объявление  
    перед строкой 9
     
    template <class Type> class NodeData;
     
    то тогда жалется уже по-другому:
     
    [C++ Error] tree.h(36): E2148 Default argument value redeclared for parameter 'DataType2'  
     
    Что-то совсем лыжи не едут.  
    Что не так в этом коде?
     

    Всего записей: 1078 | Зарегистр. 07-07-2002 | Отправлено: 08:30 31-05-2006
    WiseAlex



    Софтовых дел М...
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AnGo
    попробуй из  

    Цитата:
    template <class Type,class DataType2=NodeData<Type> > class Tree; (стр. 9)  

    сделать так:

    Код:
    template <class Type,class DataType2 > class Tree; (стр. 9)  

    может проблема из-за двойного описания значения по-умолчанию (кстати VC8 двойное умолчание тоже не нравится правда выдает только предупреждение)

    Всего записей: 1001 | Зарегистр. 02-03-2003 | Отправлено: 11:41 31-05-2006
    AnGo



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    WiseAlex
     
    Все - проблема снята, сделал как обычно.
    Снял объявление умолчания в стр. 35.

    Всего записей: 1078 | Зарегистр. 07-07-2002 | Отправлено: 13:38 31-05-2006
    DeviL



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Привет народ!  
    Возник такой вопрос по ссылкам: в чем различие?

    Код:
    const int &i
    int const &i
    int & const i

     
    Добавлено:
    Привет народ!  
    Возник такой вопрос по ссылкам: в чем различие?

    Код:
    const int &i
    int const &i
    int & const i

    Всего записей: 268 | Зарегистр. 24-10-2003 | Отправлено: 13:22 02-06-2006
    RedLord

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    const int &i  
    int const &i  
     
    ссылка на константу
    i = 5; // error l-value specifies const object
     
    int zz = i;
     
    можно только читать
     
     
    ссылка на не константу
    int & const i
    i = 5; // Ok
    int zz = i;
    можно и читать и писать
     
    в данном случае const не нужен.

    Всего записей: 730 | Зарегистр. 05-03-2004 | Отправлено: 14:58 02-06-2006 | Исправлено: RedLord, 15:00 02-06-2006
    SaDFromSpb



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Хм.. а у меня
    int & const i;  // error: 'const' qualififers cannot be applied to 'int&'
    Да и вообще смысл этой записи никак понять мне не удается.

    Всего записей: 209 | Зарегистр. 22-06-2004 | Отправлено: 16:26 02-06-2006
    RedLord

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

    Цитата:
    в данном случае const не нужен

    и по стандарту - это так.
    Но на VC 6.0 - только warning.
    на компилирах с EDG ядром (Intel, Comeau) - error
     
     

    Всего записей: 730 | Зарегистр. 05-03-2004 | Отправлено: 16:36 02-06-2006
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 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