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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    veronica b

    Цитата:
    Гуано - это весьма ценая состовляющая экспорта Чили


     

    Цитата:
    Кстати, в моей практике я не встречался с необходимостью применения шаблонов

    Но они существуют. и хорошо выручают. хотя злоупотреблять тоже не следует.

    Всего записей: 730 | Зарегистр. 05-03-2004 | Отправлено: 20:59 23-05-2007
    DrHead



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите пожалуйста!!!
    Задача написать програму для сортировке чего-угодно методом 'quick sort', с использованием template классов. В принципе сам алгоритм не проблема(надеюсь). Не знаю просто как вызвать методы класса в int main. Вот примерно структура программы(функции, которые пустые, я напишу сам). Объясните как мне вызвать эти функции в int main пожалуйста. Вот код:
     

    Код:
    #include <iostream>
    using namespace std;
     
    template <class Item>
    class Array
    {
        private:
            Item *arrayPtr;
            int size;
        public:
            Array(int n)
            {
                size=n;
                arrayPtr = new Item [n];
            }
            Item & operator[] (int index)
            {
                return arrayPtr[index]
            }
            };
     
     
     
     
     
    template <class Item>
    class Sort
    {
    private:
        void partition1(Array<Item*>& A,int l, int r)
        {
        
        
        
        }
    public:
        void qSort(Array<Item*>& A, int l, int r)
        {}
     
        void generateAscending(Array<Item*>& A,int n)
        {
         int n=12;  // заполнить массив
         Array<int> A(n);
         for (int i = 0; i < n; i++)  
             A[i] = i+1;
         for (int i = 0; i < n; i++)  
             cout<<A[i]<<" ";
        }
        
    };
     
    int main()
    {
         Sort<int> t; // здесь я пытаюсь вызвать функцию generateAscending, но не работает
         t.generateAscending(А,int n); // подскажите как нужно пожалуйста(функция генерирует массив, который должен будет сортироваться в дальнейшем)
     
        system ("pause");
    };

     
     
    Спасибо зарание!!!

    Всего записей: 47 | Зарегистр. 07-03-2004 | Отправлено: 01:48 24-05-2007 | Исправлено: DrHead, 01:50 24-05-2007
    Qraizer



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    veronica b
    Цитата:
    Кстати, в моей практике я не встречался с необходимостью применения шаблонов.
    До момента откровения (см. выше) я тоже их не применял. Сейчас почти в каждой моей программе они присутствуют. Пока не представляешь себе вкупе всех возможностей той или иной языковой конструкции, вполне нормально не видеть многих мест для её применения. Можно сказать, что Александреску показал мне направление, а дальше уже проще пошло. Да и сырцы boost-а внушают.

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

    Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 14:07 24-05-2007
    Vladimir_Pashutin

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

    Цитата:
    До момента откровения  

    Благодарю за ссылку, признаться давно не получал таких эмоций, хоть и не откровение, но выше всяких похвал, не приходило в голову что можно с типами такое вытворять. Правда и задач такого уровня последние два года у меня не было, но сейчас как раз намечается. БЛАГОДАРЮ.

    Всего записей: 70 | Зарегистр. 14-05-2003 | Отправлено: 18:11 24-05-2007
    MFPSoftware



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть функция, в которой считывается текстовой файл. Хочу сделать, что бы в функцию можно было передавать имя файла, который нужно считать.
     
    Сейчас прототип выглядит так:

    Код:
    void Save()
    {
         ofstream group;
         group.open("file.txt", ios::trunc);
         ....
    }

     
    Как описать функцию так, что бы "file.txt" можно было передавать в функцию?
    Пробовал сделать void Save (char str);
     
    А в функции сделать group.open(str, ios::trunc);
     
    Но там почему то конфликтуют типы данных.
     
    Подскажите, как это сделать?
    ==============
    Добавлено:
    Решение проблемы потом нашел сам. Нужно было только прибавить размер массива символов.

    Всего записей: 576 | Зарегистр. 01-04-2005 | Отправлено: 20:14 24-05-2007 | Исправлено: MFPSoftware, 20:26 24-05-2007
    Labutin



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    void Save(const char * const fileName)  
    {
    ...
       group.open(fileName, ios::trunc);  
    }

    Всего записей: 935 | Зарегистр. 31-07-2001 | Отправлено: 20:34 24-05-2007 | Исправлено: Labutin, 20:35 24-05-2007
    WiseAlex



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

    Код:
     
    BEGIN_STRUCT(StructName)
     FIELD(int a:2, fieldDescription)
     FIELD(int b:4, fieldDescription)
     ...
    END_STRUCT(StructName)
     

     
    все бы хорошо, но мне нужно генерировать специальную инициализированную константу:

    Код:
     
    const StructName TempVar={-1,-1,-1};
     

     
    если FIELD заменять на "-1," , то получается некорректное выражение (с запятой перед } )
    можно где-то написать количество полей и развернуть циклом с помощью boost::preprocessor (так сейчас сделано), но смущает возможность ошибиться и написать некорректное число
     
    что посоветуете?

    Всего записей: 1001 | Зарегистр. 02-03-2003 | Отправлено: 13:56 25-05-2007
    Qraizer



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Vladimir_Pashutin
    Спасибо скорее не мне, а скорее veronica b и TeXpert. И кстати, с Александреску у меня только началось, откровение пришло позже примерно на полгода, когда опыту поднабрался.
    Да и вот забыл:
    Цитата:
    Стандарт - это лишь средство договориться, а каждый компилятор вещь в себе!
    Не совсем так. Стандарт - это закон. Любая реализация обязана ему следовать. Но может расширять предоставляемые возможности, причём в рамках, опять-таки определёнными стандартом. Поэтому, если какая-нибудь реализация не удовлетворяет хоть одному пункту стандарта, она априори неправа. Посему отсутствие поддержки экпорта шаблонов с моей точки зрения есть очень большой недостаток.

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

    Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 14:23 25-05-2007
    Vladimir_Pashutin

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

    Цитата:
    Поэтому, если какая-нибудь реализация не удовлетворяет хоть одному пункту стандарта, она априори неправа.

    Тут можно слишком глубоко увязнуть в дебрях курицы и яйца. Естесственно должно быть установлено поголовное соблюдение стандартов, но кто ж например у нас в стране соблюдает все законы? Да и потом, если не делать расширений стандарта, то и развитие остановится, а после принятия изменений стандарта свои замечательные решения подгонять под требования стандартов что-то мало охотников. Короче имеем что имеем, и глюки и фичи и как всегда заплатные решения. Но несмотря на всё это в подавляющем большинстве случаев в первую очередь ищи проблемы у себя, а если начал сомневаться в соблюдении стандартов компилятором - то либо делаешь полную ерунду (что чаще всего) либо ты наконец добрался до возможностей передовых технологий и тебе повезло упереться в недоговорённости разработчиков компиляторов по поводу трактовки стандарта, ну тут уж что ж ... Всё равно твои проблемы никто за тебя не решит. Говоря про вещь в себе, я имел ввиду эти редкие элементы. Просто мне в такие ситуации приходилось попадать довольно часто.

    Всего записей: 70 | Зарегистр. 14-05-2003 | Отправлено: 15:12 25-05-2007
    Qraizer



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Проблема курицы и яйца тут решается легко: стандарт - закон. Всё. Ну а если что-то из стандарта в некой конкретной реализации не реализовано, так об этом написано большими буквами в реадми. Так что статус-кво так или иначе соблюдается, хоть это и не всегда радует.
    Изменения в стандарте - до сих пор такая практика используется - всегда (почти) идёт с соблюдением обратной совместимости. Примеров тому немало - абсолютно неструктурный, но стандартизованный в этой своей форме switch; ключевые слова auto, inline и register, давно уж изжившие себя; С-библиотека вместо аналогичной по фунциональности "портированной" в C++; трёхвариантный char (знаковый, беззнаковый и никакой), вместо отдельно char и отдельно какие-нибудь signed/unsigned byte, например; итп. На нарушение принципа обратной совместимости идут крайне редко, и то только тогда, когда изменений в существующих проектах либо мало, либо они несложно реализуются. Либо таких проектов в принципе немного, хотя тут оценки, конечно, приблизительные. Например, отмена неявного int в составных типах. Поэтому нормально (читай, переносимо) написанный проект будет требовать совсем мало усилий для поддержки и сопровождения, не взирая ни на какие изменения в стандарте.
    Другое дело, когда проект насквозь пронизан расширениями стандарта. Тут авторам не позавидуешь. С другой стороны, кто им виноват, что они сами себя загнали в угол? Это я к
    Цитата:
    ...но кто ж например у нас в стране соблюдает все законы
    Можно не соблюдать, но потом винить, кроме себя, будет некого.
    Что касается "законодательной" силы стандарта. Я в эпоху перед откровением как-то набросал большущую библиотеку, которая вся сплошь была метапрограммной. (Кстати, во время её написания "откровение" как раз и наступило. ) При том, что в то время её мог потянуть только Intel Compiler (точнее, всё, что юзает EDG, но не суть). Сейчас её прекрасно понимают (из доступных мне реализаций) Comeau и MSVC. Так что стандарт - это законодательная сила.

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

    Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 21:01 25-05-2007 | Исправлено: Qraizer, 21:11 25-05-2007
    TeXpert



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Qraizer
    Цитата:
    ...стандарт - закон

    Цитата:
    Можно не соблюдать, но потом винить, кроме себя, будет некого
    Отлично сказано.
    Цитата:
    Кстати, во время её написания "откровение" как раз и наступило
    Своеобразный "инкубационный" период).
     
    Ребята, вопрос: насколько знаю, к Intel Compiler есть мощная математическая библиотека. Меня интересует версия как для Unix-систем, так и для Windows. Где разжиться можно?

    ----------
    Майкудук, Пришахтинск не предлагать!:)
    А на Пирогова приходит снова весенний гомон...

    Всего записей: 3604 | Зарегистр. 08-02-2003 | Отправлено: 22:07 25-05-2007
    GOGACL

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Кто разъяснит? Задача такая: сортировка отбором анализирует массив, отыскивая наименьший элемент массива. Затем этот наименьший элемент обменивается местами с первым элементом массива. Процесс повторяется для подмассива, начинающегося со второго элемента массива. В результате каждого прохода один из элементов занимает соответствующее место. Эта сортировка по производительности сравнима с пузырьковой — для массива из n элементов нужно выполнить n - 1 проход, а для каждого подмассива нужно выполнить n - 1 сравнение для определения наименьшего значения. Когда обрабатываемый подмассив будет содержать только один элемент, значит массив отсортирован. Нужно написать  рекурсивную функцию selectionSort, выполняющую этот алгоритм.
     
    Итеративную функцию я написал, а вот рекурсия никак не прет...

    Всего записей: 62 | Зарегистр. 20-10-2006 | Отправлено: 16:33 26-05-2007
    Labutin



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    GOGACL
    Это кто же заставил написать рекурсивный вариант? В 99% случаев (а может быть в 100% ) рекурсия работает медленней!

    Всего записей: 935 | Зарегистр. 31-07-2001 | Отправлено: 17:05 26-05-2007
    veronica b



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

    Цитата:
    Ребята, вопрос: насколько знаю, к Intel Compiler есть мощная математическая библиотека. Меня интересует версия как для Unix-систем, так и для Windows. Где разжиться можно?

    По этому вопросу обратитесь в соседнию ветку к фортранщикам. Это их хлеб и тут они впереди планеты всей

    Всего записей: 504 | Зарегистр. 04-12-2006 | Отправлено: 17:12 26-05-2007
    Labutin



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

    Код:
     
    void selectionSort(int *m, int start, int len)
    {
        int min = start;
        for (int i = start + 1; i < len; ++i)
            if (m[min] > m[i])
                min = i;
        if (min != start)
        {
            int tmp = m[start];
            m[start] = m[min];
            m[min] = tmp;
        }
        if (start < len - 1)
            selectionSort(m, start + 1, len);
    }
     

    Всего записей: 935 | Зарегистр. 31-07-2001 | Отправлено: 17:19 26-05-2007
    GOGACL

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

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



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Легко
    Код:
    void selectionSort(int *m, int len)  
    {  
        int min = 0;  
        for (int i = 1; i < len; ++i)  
            if (m[min] > m[i])  
                min = i;  
        if (min != 0)  
        {  
            int tmp = m[0];  
            m[0] = m[min];  
            m[min] = tmp;  
        }  
        if (0 < --len)  
            selectionSort(++m, len);  
    }
    Вот только не понятно, на фиг тут рекурсия. Без неё быстрее, с ней - не проще.
     
    P.S. Не компилировал.


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

    Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 13:23 28-05-2007 | Исправлено: Qraizer, 13:25 28-05-2007
    GOGACL

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Qraizer
    Функция тоже работает.
    Получается что в данном случае нет необходимости применять рекурсию?
    Данная задача была поставленна для изучения механизма рекурсии.
    Но вот с этим как раз и проблема. Тема вроде легкая, но ни как не поддается...

    Всего записей: 62 | Зарегистр. 20-10-2006 | Отправлено: 14:32 28-05-2007
    alxm

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    На VC6.0 написана долго выполняющаяся процедура, периодически производящая вывод информации через
    SendDlgItemMessage( hWnd, IdInfo, WM_SETTEXT, 0, (LPARAM)t );
    Информация в поле вывода становится видна лишь по окончании работы процедуры, а нужно, чтобы она периодически обновлялась.
    Полагаю, что нужно приостановить работу процедуры для обновления диалоговых элементов, но не знаю как. Может быть, есть какая-то функция?

    Всего записей: 8 | Зарегистр. 26-02-2006 | Отправлено: 00:48 30-05-2007
    xdude



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    alxm
    Вообще-то такие процедуры лучше выполнять в отдельном треде. Тогда диалоговое окно не будет "замерзать" на время выполнения, и всё будет нормально прорисовываться.
    См. API-ф-цию CreateThread (CreateThreadEx), или boost::thread.
    Если юзаешь MFC и не хочешь заморачиваться с мультитредовостью - можно просто где-то внутри твоего рабочего цикла (если это цикл, конечно) вставить приблизительно такую конструкцию:

    Код:
     
        while ( ::PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE ) )  
        {  
            if ( !PumpMessage( ) )  
            {  
                ::PostQuitMessage( );  
                break;  
            }  
        }  
     

    Если же MFC не юзаешь, то надо написать свой аналог функции PumpMessage, которая будет обрабатывать системные сообщения.
    См. MSDN >> Idle Loop Processing

    Всего записей: 481 | Зарегистр. 04-11-2004 | Отправлено: 01:06 30-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