На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Название темы должно быть информативным !
Прежде чем задать вопрос, воспользуйтесь Поиском. и проверьте в FAQ (ЧАВО) Паскаля
Чтобы получить вразумительный ответ, подробно опишите проблему: что надо сделать, что не получается и номер ошибки (если есть), которую выводит компилятор.
Для вставки кода ваших программ используйте, пожалуйста, кнопку СODE=pas или выпадающий список СODE для других языков (подсветка синтаксиса).
[!] Как правильно задавать вопросы | Руководство по языку B.Pascal 7 & Objects/LR | Borland Pascal. Руководство пользователя
Модераторы: volvo877
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> в качестве элементов массива использовать даты типа 26.11.94, 9.5.00 и т. д. , необходимо сортировать массив состоящий из дат, как его сформировать п
    Всем программистам привет! Respect! В общем есть достаточно простая задачка: реализовать два метода сортировки и провести их экспериметнальное сравнение(пузырек и Шелла). Но также есть условие, что в качестве элементов массива использовать даты типа 26.11.94, 9.5.00 и т. д. Как понял в турбо паскале типа данных "дата" нет? Каким образом можно будет получать значения(т е в виде даты) при помощи random? Нужно допустим 3 переменных: i, j, k(i - число[1..31] , j - месяц[1..12], k - двадцатый век[0..99]). Но уже здесь есть нюанс, т к можно сгенерировать не существующую дату(например 31 февраля и т. п.), что думаю не есть хорошо. Затем так например:
    ExpandedWrap disabled
      i := random(31) + 1;
      j := rabdom(12) + 1;
      k := random(100);
      затем:
    str(i, str_i);
    ExpandedWrap disabled
      str(j, str_j);
      str(k, str_k);
    и только потом с конкатенировать нужное значение:
    ExpandedWrap disabled
      value := str_i + '.' + str_j + '.' + str_k;
    Неужели как то по другому дату нельзя получить? Подскажите как быть то?
      Цитата FasterHarder @
      Неужели как то по другому дату нельзя получить? Подскажите как быть то?

      как вариант, получай даты создания файлов :)

      а вообще в твоем варианте генерации ошибка - не учитывается что в разных месяцах разное число дней (и не забывай про високосный год)
        Цитата
        а вообще в твоем варианте генерации ошибка - не учитывается что в разных месяцах разное число дней (и не забывай про високосный год)

        в этом тоже есть проблема, хотя эту проблему легко решить, если генерировать число максимум в 28 дней? Как я думаю, в данной задаче не должно быть жесткой привязки к корректности даты, главное ведь правильно отсортировать и сравнить?

        Цитата
        как вариант, получай даты создания файлов

        каких файлов? немного мысль не уловил и как?
          ExpandedWrap disabled
            const
              days: array[1 .. 12] of integer = (
                31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
              );
             
            var
              D, M, C: integer;
             
            begin
              M := random(12) + 1;
              D := random(days[M]) + 1;
              C := random(100);
            end.

          Можно легко добавить проверку високосности года, но поскольку у тебя работа с веком - я не стал этого делать...
            Цитата FasterHarder @
            каких файлов? немного мысль не уловил и как?

            ну пройдись, к примеру, по корневой директории и считай даты создания/модифкации реальных файлов.
              чтобы отловить високосный год, необходимо впервую очередь получить год:
              yera := random(100);
              затем проверить такое условие:
              ExpandedWrap disabled
                if( (year = 0) or (year mod 4 = 0) ) then  {2000, 1996, 92 были високосными :) }
                begin
                  days[2] := days[2] + 1;
                  M := random(12) + 1;
                  D := random(days[M]) + 1;
                  days[2] := days[2] - 1;  {вернули обратно}
                end
                else
                begin
                  M := random(12) + 1;
                  D := random(days[M]) + 1;
                end;


              вроде б так?
                Специально для тех, кому КАЖДЫЙ раз хочется написать свой велосипед:
                Является-ли год високосный ? (сообщение #580048)

                Учи матчасть - то, что ты сделал - не является проверкой на високосность...

                Программа поменяется вот так:
                ExpandedWrap disabled
                    days[2] := 28;
                    Y := 1900 + random(100);
                    Inc(days[2], Byte(bsYear(Y)));
                    M := random(12) + 1;
                    D := random(days[M]) + 1;
                (и не надо дублировать целые строки кода...)
                  thank's volvo877 за просвещение и всем кто подсказывал. :)
                    Цитата
                    Как понял в турбо паскале типа данных "дата" нет?

                    Ну вобще-то есть,
                    TDateTime (type) (WinDos unit)
                    Сообщение отредактировано: ZenIA -
                      я работаю под дос.
                        Цитата FasterHarder @
                        я работаю под дос.

                        Тоже есть.
                        DateTime - Модуль DOS
                          Цитата
                          Тоже есть.
                          DateTime - Модуль DOS


                          хм, а вот это уже интересно. :)
                            Дайте плиз кто нибудь хорошую ссылку на описание полного анализа метода сортировки Шелла. В инете я прокопался 3 часа, поднял тучу сайтов, но так до конца и не понял, как она работает :wall: ,(точнее понял но не все нюансы) как делается првильное разбиение на поддиапазоны и т. д. Везде сказано, что в основе лежит метод вставок, с ним я разобрался идеально. Подскажите как быть то?

                            P.S. естесно нашел в нашем факе этот метод, но это вообще копец, вложенные until с условием на not. Код работает исправно, но без коментов и разбираться достаточно долго. Также в факе когда изучал метод пузырька, то сразу не понял(т к все через until), нашел реализацию через for, все стало очень понятно + меньше на одну переменную юзается, поэтому фак не предлагать, был я там :) .
                              неужели никто не подскажет по сортировки шелла?
                                up
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0346 ]   [ 14 queries used ]   [ Generated: 18.05.24, 14:49 GMT ]