The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Скрипт, проверяющий високосный, или нет, год., !*! Ishly, 24-Янв-09, 19:01  [смотреть все]
Нужно написать скрипт, который будет проверять, указанный в качестве аргумента, в командной строке, год, и выводить результат в виде сообщения "год високосный", "год не високосный".

Первое, что пришло на ум, это попытаться разделить числовое значение года
(напр.: 2009) на 4, и, если останется остаток, то вывести сообщение: "год високосный".

I. Вариант.
Я делал так:
1) Создал отдельную папку (напр.: scripts);
2) В папке создал текстовый файл, дал ему имя (напр.: script) и расширение (.sh)
в итоге получился текстовый файл - script.sh
3) И в нём уже набирал вот это:

#script 1 (как я понял, всё, что написано после знака "#" является комментарием, и эту строку можно опустить, разве что для удобства написать, чтО этот скрипт делает)
date +%Y
x=(date +%Y)
a=`expr $x % 4`; echo a=$a
if (a=0)
then echo "God visokosnij"
else echo "God ne visokosnij"
fi

Знаю, что где-то не правильно, только где? Не судите строго.)

Подскажите как правильно записать.

II. Вариант.
И если не трудно, то можно показать как бы это выглядело, если бы я вбивал всё через саму консоль (или терминал, вроде бы одно и то же, только на разных линуксах, по-разному называется).

  • Скрипт, проверяющий високосный, или нет, год., !*! vic, 19:57 , 24-Янв-09 (2)
    >Нужно написать скрипт, который будет проверять, указанный в качестве аргумента, в командной
    >строке, год, и выводить результат в виде сообщения "год високосный", "год
    >не високосный".


    [ $(($1 % 4 == 0 && ($1 % 100 != 0 || $1 % 400 == 0) )) -eq 1 ] && echo "високосный" || echo "не високосный"

    >Первое, что пришло на ум, это попытаться разделить числовое значение года
    >(напр.: 2009) на 4, и, если останется остаток, то вывести сообщение: "год
    >високосный".

    а хотя бы погуглить на тему "високосный год, вычисление" религия не позволяет? =)
    по жизни такая фигня происходит с периодом обращения планеты во круг солна и вокруг себя, что не точно каждый 4 год високосный, потому формула юный падаван иная. Но и эта не совсем точная :))

    ЗЫ Астрономию походу в школе отмеили О_о

    >1) Создал отдельную папку (напр.: scripts);
    >2) В папке создал текстовый файл, дал ему имя (напр.: script) и
    >расширение (.sh)
    >в итоге получился текстовый файл - script.sh

    вышеуказанную строку в этот файл вбивай, вай =)
    и не забудь chmod +x script.sh сделать иначе с запуском будешь иметь проблемы ты ;)


    • способ, другой :), !*! Andrey Mitrofanov, 12:21 , 25-Янв-09 (3)
      >[ $(($1 % 4 == 0 && ($1 % 100 != 0
      >|| $1 % 400 == 0) )) -eq 1 ]

      [ "`date -d "$1-03-01 -1 day" +%d`" == "29" ]

      > && echo "високосный" || echo "не високосный"

      • способ, другой :), !*! Ishly, 19:07 , 25-Янв-09 (4)
        >>[ $(($1 % 4 == 0 && ($1 % 100 != 0
        >>|| $1 % 400 == 0) )) -eq 1 ]
        >
        >[ "`date -d "$1-03-01 -1 day" +%d`" == "29" ]
        >
        >> && echo "високосный" || echo "не високосный"

        Спасиб.)

      • способ, другой :), !*! vic, 13:41 , 26-Янв-09 (7)
        >>[ $(($1 % 4 == 0 && ($1 % 100 != 0
        >>|| $1 % 400 == 0) )) -eq 1 ]
        >
        >[ "`date -d "$1-03-01 -1 day" +%d`" == "29" ]
        >
        >> && echo "високосный" || echo "не високосный"

        [вредничает и ворчит]
        00) с точки зрения фанатов оптимизации - один лишний вызов другого процесса (date) :)))
        01) не факт что конструкция "-1 day" поддерживается (мало ли не линуксовый date)
        10) зачем числа как строки сравнивать есть же -eq
        [/вредничает и ворчит]

        хотя красиво ;)

        • способ, другой :), !*! phpcoder, 13:52 , 26-Янв-09 (10)
          >>>[ $(($1 % 4 == 0 && ($1 % 100 != 0
          >>>|| $1 % 400 == 0) )) -eq 1 ]
          >>
          >>[ "`date -d "$1-03-01 -1 day" +%d`" == "29" ]
          >хотя красиво ;)

          Вот только == не портабельно, надо = использовать.

          • способ, другой :), !*! vic, 14:39 , 26-Янв-09 (14)
            >>>>[ $(($1 % 4 == 0 && ($1 % 100 != 0
            >>>>|| $1 % 400 == 0) )) -eq 1 ]
            >>>
            >>>[ "`date -d "$1-03-01 -1 day" +%d`" == "29" ]
            >>хотя красиво ;)
            >
            >Вот только == не портабельно, надо = использовать.

            в первом или втором случае? я забыл (жутко краснеет) =)
            a) [ $((!($1 % 4) && ($1 % 100 || !($1 % 400)))) -eq 1 ]
            b) [ `date -d "$1-03-01 -1 day" +%d` -eq 29 ]

    • Скрипт, проверяющий високосный, или нет, год., !*! Ishly, 19:13 , 25-Янв-09 (5)
      >[оверквотинг удален]
      >=)
      >по жизни такая фигня происходит с периодом обращения планеты во круг солна
      >и вокруг себя, что не точно каждый 4 год високосный, потому
      >формула юный падаван иная. Но и эта не совсем точная :))
      >
      >ЗЫ Астрономию походу в школе отмеили О_о
      >
      >вышеуказанную строку в этот файл вбивай, вай =)
      >и не забудь chmod +x script.sh сделать иначе с запуском будешь иметь
      >проблемы ты ;)

      Спасиб.
      Школа моя странная, всего 1 семестр ОС даёт; )
      Известны мне рассуждения эти, и что сутки длятся не ровно 24 часа...)

      • Скрипт, проверяющий високосный, или нет, год., !*! const86, 10:07 , 26-Янв-09 (6)
        >Известны мне рассуждения эти, и что сутки длятся не ровно 24 часа...)

        Нет, сутки как раз 24 часа, а то иначе у нас бы день с ночью ролями менялись. Зима с летом не меняются как раз благодаря 29 февраля, появляющемуся в удачные моменты.

        • Скрипт, проверяющий високосный, или нет, год., !*! vic, 13:44 , 26-Янв-09 (8)
          >>Известны мне рассуждения эти, и что сутки длятся не ровно 24 часа...)
          >
          >Нет, сутки как раз 24 часа, а то иначе у нас бы
          >день с ночью ролями менялись. Зима с летом не меняются как
          >раз благодаря 29 февраля, появляющемуся в удачные моменты.

          тупо костыль планетарного масштаба :)))

        • %*) Как сложно жить, девочки!, !*! Andrey Mitrofanov, 13:51 , 26-Янв-09 (9)
          >Нет, сутки как раз 24 часа, а то иначе у нас бы день с ночью ролями менялись.

          "Астрономию походу в школе отмеили О_о" -- по факту, видимо, давно.
          Сутки, действительно, 24 часа.
          А вращение Земли, говорят, замедляется.

          ""Earth's rotation period relative to the fixed stars, called its stellar day is ... 23h 56m 4.098 903 691s ...""(Wikipedia)

          ---Я молчать не буду! Тигру в клетке мяса не докладывают!!(c)

          • заговор астрономического масштаба, !*! Andrey Mitrofanov, 14:02 , 26-Янв-09 (11)
            >>Нет,
            >>то иначе у нас бы день с ночью ролями менялись.
            >"Астрономию походу в школе отмеили О_о" -- по факту, видимо, давно.
            >stellar day is ... 23h 56m 4.098 903 691s

            $ echo $(( 12*60*60*1000/(4*60*1000-4098) ))
            183
            $ _

            Вот я и спашиваю, меняются ли "у нас" ночь с днём раз в пол-года? %)

            >---Я молчать не буду! Тигру в клетке мяса не докладывают!!(c)

          • %*) Как сложно жить, девочки!, !*! const86, 14:07 , 26-Янв-09 (12)
            >""Earth's rotation period relative to the fixed stars, called its stellar day
            >is ... 23h 56m 4.098 903 691s ...""(Wikipedia)

            Ваши наручные часы показывают время по Солнцу или по "fixed stars"?
            Люди, заявляющие о том, что в сутках не ровно 24 часа,
            как раз под сутками понимают те, что по Солнцу.

            • не быть мне космонавтом :/, !*! Andrey Mitrofanov, 14:20 , 26-Янв-09 (13)
              >Ваши наручные часы показывают время по Солнцу или по "fixed stars"?
              >Люди, заявляющие о том, что в сутках не ровно 24 часа,
              >как раз под сутками понимают те, что по Солнцу.

              Ну, я в общем-то знал, что с астрономией у меня даже хуже, чем с географией. Нефига было и начинать...

            • %*) Как сложно жить, девочки!, !*! Ishly, 19:45 , 26-Янв-09 (15)
              >>""Earth's rotation period relative to the fixed stars, called its stellar day
              >>is ... 23h 56m 4.098 903 691s ...""(Wikipedia)
              >
              >Ваши наручные часы показывают время по Солнцу или по "fixed stars"?
              >Люди, заявляющие о том, что в сутках не ровно 24 часа,
              >как раз под сутками понимают те, что по Солнцу.

              1) 23 часа 56 минут 4 секунды = 24 часа? (Поэтому я и сказал, что не ровно 24 часа, хотя сами используем 24h систему)
              2) На тот момент я полагал, что високосный год появляется из-за этой неточности в неск. минут, т. к. к астрономии закончил обращаться давным-давно;
              3) В 46 году до н. э. римский диктатор Гай Юлий Цезарь ввёл (разработанный александрийскими астрономами во главе с Созигеном) календарь, который был основан на том, что период обращения Земли вокруг Солнца примерно равен 365,25 суток (365 суток и 6 часов). Этот календарь был назван юлианским. Для того, чтобы выровнять шестичасовое смещение, был введён високосный год. Три года считалось по 365 суток, а в каждый год, кратный четырём, добавлялись одни дополнительные сутки в феврале.
              (с) Wiki.

              • %*) Как сложно жить, девочки!, !*! const86, 23:40 , 26-Янв-09 (16)
                1) Нет, подвох не в арифметике, а в астрономии :) Солнце описывает круг на небе за 24 часа (неточность если и есть, то сильно меньше секунды), а звёзды - как раз за 23:56:04. Вы таки смотрите на Солнце или на звёзды?



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру