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

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

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Здравствуйте.
     
    У меня вопрос. Как работает конструкция switch-case, допустим есть такой код:
     
    while(1) {
        switch (state) {
        case 1:
            state = 2;
            k = 1;
            break;
        case 2:
            k = 2;
            break;
        }
    }
     
    какое значение примет переменная k за первый проход цикла? 1 или 2?  
    т.е. впрос звучит так, switch-case делает проверку один раз за проход?

    Всего записей: 79 | Зарегистр. 01-03-2009 | Отправлено: 03:28 15-06-2012
    akaGM

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

    Цитата:
    какое значение примет переменная k за первый проход цикла? 1 или 2?  

    ты не забыл инициализировать state?
    state = 1; так будет k=1
    state = 2; так будет k=2
     

    Цитата:
    т.е. впрос звучит так, switch-case делает проверку один раз за проход?

    уже зависит от того где ты решишь поставить отпрыги
     
    хоть так:
     
    switch (state) {
        case 1:
        case 3:
        case 5:
        case 7:
            k = 1;
            break;
        case 2:
            k = 2;
            break;
    }

    Всего записей: 24116 | Зарегистр. 06-12-2002 | Отправлено: 03:42 15-06-2012
    ne_viens

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

    Цитата:
     
    ...
    какое значение примет переменная k за первый проход цикла? 1 или 2?  
    т.е. впрос звучит так, switch-case делает проверку один раз за проход?

     
    Сначала выполнится case потом state=2, значит к=1
     
    Вместо while(1) {} лучше пользоватся for(;;) {} , таким образом экономится 3 инструкции машинного кода. И одна буква c кода тоже

    Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 11:28 15-06-2012
    cp58

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

    Цитата:
    Вместо while(1) {} лучше пользоватся for(;;) {} , таким образом экономится 3 инструкции машинного кода.

    Сами придумали?
    stasnewar
    break здесь неспроста.

    Всего записей: 295 | Зарегистр. 06-12-2011 | Отправлено: 12:05 15-06-2012
    akaGM

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

     
    infiniteloop:
      ...
    goto infiniteloop;
     
    :)
     
    stasnewar
    и не забывай, что у switch'a есть дефолтная ветка.
    при старте с state=100 ты вообще ни фига не получишь, вернее, получишь то что я написал чуть выше...

    Всего записей: 24116 | Зарегистр. 06-12-2002 | Отправлено: 12:09 15-06-2012 | Исправлено: akaGM, 12:52 15-06-2012
    ne_viens

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

    Цитата:
    Сами придумали?  
    ...

     
    Посмотрел.
    При неоптимизированном коде это всегда так, если врубить /Ox , то иногда, если петля длинная.

    Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 13:40 15-06-2012
    stasnewar

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

    Цитата:
    ты не забыл инициализировать state?  

     
    Забыл, писал на скорую руку. Да, сначала  state=1, следует k=1 за первый проход.

    Всего записей: 79 | Зарегистр. 01-03-2009 | Отправлено: 13:45 15-06-2012
    akaGM

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

    Код:
    switch (state) {
        case 1:
            k = 1;
        case 2:
            k = 2;
        case 3:
            k = 3;
        case 4:
            k = 4;}
    а так?
    ты б лучше в книжке один раз посмотрел...

    Всего записей: 24116 | Зарегистр. 06-12-2002 | Отправлено: 13:53 15-06-2012
    blaro



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Добрый вечер. У меня такой вопрос: как написать функцию которая принимает указатель на объект и выделяет для него в памяти место и так же возвращала указатель на него? Для наглядности приведу приме

    Код:
     
    int *a;
    char *b
    float *c
     
    //
    ... mymalloc(a)
    {
     return (a)malloc(100*sizeof(a));
    }
    //В конце должен быть массив целых чисел [0][1][2]...[100]
    //Если передать char то будет массив букв [0][1][2]...[100]
     

    Я может не правильно написал, но как то так. Вот мой набросок функции:

    Код:
     
    void* CREATE_TREE(void* t)
    {
        return (t)calloc(sizeof(t),1);
    }
     

    Но получаю ошибку expected ; before 'calloc'. Что это значит я не знаю

    ----------
    Оптимистично смотрю на мир глазами убийцы.

    Всего записей: 311 | Зарегистр. 29-01-2006 | Отправлено: 20:54 15-06-2012
    cp58

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

    Цитата:
    void* CREATE_TREE(void* t)
    {
        return (t)calloc(sizeof(t),1);
    }  

    Смысл передавать указатель, если функция выделения памяти из кучи все равно вернет новый?
    И что значит (t), если это переменная, а не тип?
    int *t; это просто объявление переменной, t содержит лишь мусор, оставшийся в стеке(если объявлено внутри функции). Затем этой перменной уже передается адрес на ячейку памяти размером с sizeof(type) (или начальной ячейке, если это массив).

    Всего записей: 295 | Зарегистр. 06-12-2011 | Отправлено: 21:13 15-06-2012
    blaro



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Ну а как тогда написать общую функцию которая делает так как мне надо?

    ----------
    Оптимистично смотрю на мир глазами убийцы.

    Всего записей: 311 | Зарегистр. 29-01-2006 | Отправлено: 21:19 15-06-2012
    cp58

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    blaro
    Чем стандартная функция не угодила?(malloc,calloc...)
    sizeof в любом случае работает во время компиляции.

    Всего записей: 295 | Зарегистр. 06-12-2011 | Отправлено: 21:28 15-06-2012
    kotlomoy



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

    Цитата:
    Вместо while(1) {} лучше пользоватся for(;;) {} , таким образом экономится 3 инструкции машинного кода. И одна буква c кода тоже

    В конфигурации Debug - да, экономится. Только как-то глупо экономить несколько тактов процессора в неоптимизированном коде. А с включенной оптимизацией код абсолютно идентичный будет в обоих случаях.
    А с точки зрения читабельности кода (у профессиональных программистов это ключевая характеристика, ибо оптимизатору, как правило, все равно, как вы напишите один и тот же код) обычно предпочитают первый вариант.
     
    blaro
    Прочитайте хотя бы, что такое указатель, и что делают sizeof и malloc/calloc.

    Всего записей: 172 | Зарегистр. 06-03-2008 | Отправлено: 01:50 16-06-2012 | Исправлено: kotlomoy, 01:58 16-06-2012
    ItsJustMe

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

    Цитата:
    Ну а как тогда написать общую функцию которая делает так как мне надо?

    ну так и напиши, кто ж тебе мешает?

    Код:
    template <class T>
    T* Talloc(T* &t)
    {
      return t = new T();
    }

    Предполагается, что вызов для T конструктора без параметров возможен.
     
    Добавлено:
    kotlomoy

    Цитата:
    А с точки зрения читабельности кода (у профессиональных программистов это ключевая характеристика, ибо оптимизатору, как правило, все равно, как вы напишите один и тот же код) обычно предпочитают первый вариант.
    Не знал, что профессиональные программисты имеют в этом случае продпочтение, и склоняются к первому варианту По мне и так и так кошерно Но мне простительно, я - не профессиональный.

    Всего записей: 2028 | Зарегистр. 02-09-2005 | Отправлено: 02:00 16-06-2012 | Исправлено: ItsJustMe, 02:08 16-06-2012
    cp58

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

    Цитата:
    template <class T>
    T* Talloc(T* &t)
    {
      return t = new T();
    }  

    Используется C, судя по примеру, а не C++.
    Да и обертка по своей сути бесполезна.

    Всего записей: 295 | Зарегистр. 06-12-2011 | Отправлено: 04:24 16-06-2012
    kotlomoy



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

    Цитата:
    Не знал, что профессиональные программисты имеют в этом случае продпочтение, и склоняются к первому варианту По мне и так и так кошерно Но мне простительно, я - не профессиональный.

    Хорошо, когда сидишь в свое программе и пишешь как хочешь. А вот когда одну программу много людей пишет, постоянно приходится с чужим текстом работать. И когда все пишут как им захочется, то большую часть времени сидишь разбираешь чужие каракули и поминаешь авторов добрым словом.
    Так что, если нужно повысить производительность - пишите хороший читабельный текст, оформляйте его. И меньше икаться вам будет.

    Всего записей: 172 | Зарегистр. 06-03-2008 | Отправлено: 15:39 16-06-2012
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    а зачем с чужим кодом работать, ошибки вылавливать?
    хотя я-то как раз за читабельность и структурированность кода...
    хотя бы ради самого себя через n ле т:)

    Всего записей: 24116 | Зарегистр. 06-12-2002 | Отправлено: 18:49 16-06-2012 | Исправлено: akaGM, 20:47 16-06-2012
    karakurt2



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    akaGM, через n лет смотришь на код и думаешь, как же я мог такое написать

    Всего записей: 733 | Зарегистр. 06-12-2003 | Отправлено: 19:32 16-06-2012
    kotlomoy



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

    Цитата:
    а зачем с чужим кодом работать, ошибки вылавливать?

    Ошибки вылавливать, дописывать, переписывать

    Всего записей: 172 | Зарегистр. 06-03-2008 | Отправлено: 19:45 16-06-2012
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    karakurt2
    "никогда не возвращайся туда где был счастлив" -- тоже хороший лозунг :)
     
    kotlomoy
    ненадёжные у тебя соавторы...

    Всего записей: 24116 | Зарегистр. 06-12-2002 | Отправлено: 19:58 16-06-2012
    Открыть новую тему     Написать ответ в эту тему

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