Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Глагол] Определение дня по дате, Алгоритм 
V
    Опции темы
Сый
Дата 15.2.2006, 16:34 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 23.1.2006

Репутация: 1
Всего: 3



Вычисления дня недели по дате (даты ранее 1918 года будут обрабатываться неправильно). Интересный алгоритм (на Глаголе), давно искал, вот и решил с вами поделиться:
Код

ОТДЕЛ ДеньНедели+; 

ИСПОЛЬЗУЕТ Параметр ИЗ "...\Отделы\Обмен\", 
           Текст    ИЗ "...\Отделы\Числа\", 
           Вывод    ИЗ "...\Отделы\Обмен\"; 

ПЕР 
  ДеньНедели : РЯД 15 ИЗ ЗНАК; 
  годЗ, месяцЗ, деньЗ : РЯД 5 ИЗ ЗНАК; 
  год, месяц, день : ЦЕЛ; 

ЗАДАЧА Считать(гггг, мм, дд : ЦЕЛ) : ЦЕЛ; 
ПЕР 
  Добав : УЗКЦЕЛ; 
УКАЗ 
  ЕСЛИ мм < 3 ТО 
     Добав := 1 
  ИНАЧЕ 
     Добав := 0; 
  КОН; 
  ВОЗВРАТ ((( 3 * гггг - (7 * (гггг + (мм + 9) ДЕЛИТЬ 12)) ДЕЛИТЬ 4 + 
          (23 * мм) ДЕЛИТЬ 9 + дд + 2 + ((гггг - Добав) ДЕЛИТЬ 100 + 1) * 
          3 ДЕЛИТЬ 4 - 16) ОСТАТОК 7)) + 1; 
КОН Считать; 

УКАЗ 
  ЕСЛИ Параметр.всего <= 1 ТО Вывод.Цепь("Вычисление дня недели по дате.^Введите день, месяц и год (в числовом виде) в качестве параметров к программе.") 
  ИНАЧЕ 
    Параметр.Текст(1,деньЗ); Параметр.Текст(2,месяцЗ); Параметр.Текст(3,годЗ); 
    год := УЗК(Текст.ВЦел(годЗ)); месяц := УЗК(Текст.ВЦел(месяцЗ)); день := УЗК(Текст.ВЦел(деньЗ)); 
    ВЫБРАТЬ Считать(год, месяц, день) ИЗ 
        1: ДеньНедели := "понедельник"; 
      | 2: ДеньНедели := "вторник"; 
      | 3:ДеньНедели  := "среда"; 
      | 4:ДеньНедели  := "четверг"; 
      | 5:ДеньНедели  := "пятница"; 
      | 6:ДеньНедели  := "суббота"; 
      | 7:ДеньНедели  := "воскресенье"; 
    ИНАЧЕ КОН; 
    Вывод.Цепь(деньЗ); Вывод.Цепь("."); 
    Вывод.Цепь(месяцЗ); Вывод.Цепь("."); 
    Вывод.Цепь(годЗ); Вывод.Цепь(" - "); 
    Вывод.Цепь(ДеньНедели);  Вывод.Цепь("."); 
  КОН; 
КОН ДеньНедели.

--------------------
 Язык программирования, родственный языкам Паскаль и Оберон, использующий русские служебные слова - Глагол: http://glagol.nad.ru 
PM MAIL   Вверх
SoWa
Дата 15.2.2006, 21:05 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: нет
Всего: 74



Корявый какой-то язык.
Попытаюсь понять, как работает.


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
Jilian
Дата 15.2.2006, 21:13 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 24.1.2005
Где: Минск

Репутация: нет
Всего: нет



Уж лучше написать на С++ или Delphi, но с понятными идентификаторами, в самом деле, так очень сложно разобраться...
PM MAIL   Вверх
Akina
Дата 16.2.2006, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 1
Всего: 453



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

Если нет - используем API.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
dpa
Дата 16.2.2006, 00:58 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 3.2.2006

Репутация: нет
Всего: 1



O tempora! O mores!


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


А многие не знают как это работает... По моему, пост интересный, в отличие от многих...
Господа, API - не панацея!

ЗЫ
Жаль плюсы лепить не могу. В общем <+> заочно ;)

Это сообщение отредактировал(а) dpa - 16.2.2006, 01:01
PM MAIL   Вверх
Akina
Дата 16.2.2006, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 1
Всего: 453



Цитата(dpa @ 16.2.2006, 01:58 Найти цитируемый пост)
А многие не знают как это работает... По моему, пост интересный, в отличие от многих...

Если человеку нужен именно день недели - он использует встроенную или API-функцию.
Если ему просто интересно - он набирает в Гугеле (или где больше нравится) "определение дня недели" и получает вагон ссылок, половина из которых - с кодом, половина которого либо комментирована, либо настолько проста, что в комментариях не нуждается.

А если ему срочно нужно, а он начинет искать не "как", а "почему" - он просто дурак.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Сый
Дата 16.2.2006, 20:32 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 23.1.2006

Репутация: 1
Всего: 3



> Господи, зачем? Практически в любом языке есть форматирование даты в нужный формат, в т.ч. с днем недели. А во многих - и непосредственно получение дня недели по дате. Если нет - используем API.
Я не говорил, что это единственный рабочий алгоритм, и что иначе никак нельзя произвести данные вычисления. Я привёл этот алгоритм для тех, кому это интересно, я же никого не заставляю разбираться в нём и использовать только его.

> Корявый какой-то язык. Попытаюсь понять, как работает.
> Уж лучше написать на С++ или Delphi, но с понятными идентификаторами, в самом деле, так очень сложно разобраться...
Ничего подобного. Красивый язык, понятные идентификаторы. Вкратце объясняю принцип работы всей программки: сперва определяются и присваиваются параметры, переданные через командную строку, преобразуются в числовой вид, потом, используя полученные данные, вызывается задача Считать, в которой и заключён этот алгоритм. Перебираются 7 вариантов ответа этой задачи, в зависимости от которого и выводится названия дня недели.

> Жаль плюсы лепить не могу. В общем <+> заочно ;)
Спасибо smile
--------------------
 Язык программирования, родственный языкам Паскаль и Оберон, использующий русские служебные слова - Глагол: http://glagol.nad.ru 
PM MAIL   Вверх
III.nfo
Дата 17.2.2006, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 18.10.2004

Репутация: нет
Всего: 2



Это уже обсуждалось здесь.
PM MAIL WWW   Вверх
Сый
Дата 18.2.2006, 08:54 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 23.1.2006

Репутация: 1
Всего: 3



> Это уже обсуждалось здесь.
Ну там приведён алгоритм на С++, а тут на Глаголе (паскалевидном языке).
--------------------
 Язык программирования, родственный языкам Паскаль и Оберон, использующий русские служебные слова - Глагол: http://glagol.nad.ru 
PM MAIL   Вверх
SoWa
Дата 18.2.2006, 20:35 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: нет
Всего: 74



Пиши на Алголе тогда. Не режь нам глаза, а?


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
Сый
Дата 18.2.2006, 22:59 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 23.1.2006

Репутация: 1
Всего: 3



Нет уж. Предпочитаю писать по-русски даже исходные тексты программ.
--------------------
 Язык программирования, родственный языкам Паскаль и Оберон, использующий русские служебные слова - Глагол: http://glagol.nad.ru 
PM MAIL   Вверх
maxim1000
Дата 19.2.2006, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: нет
Всего: 110



Модератор:
обсуждение языков никак не соответствует тематике этого форума
Добавлено @ 00:50
думал разделить тему на две: в Алгоритмах оставить те сообщения, которые относятся к обсуждению самого алгоритма...
и, представьте себе, не нашел таких
цирк smile
а учитывая
Цитата(Сый @ 18.2.2006, 07:54 Найти цитируемый пост)
> Это уже обсуждалось здесь.
Ну там приведён алгоритм на С++, а тут на Глаголе (паскалевидном языке).

и первое сообщение можно не оставлять...
переношу "Красную книгу"...

Это сообщение отредактировал(а) maxim1000 - 19.2.2006, 00:52


--------------------
qqq
PM WWW   Вверх
Cr@$h
Дата 24.2.2006, 01:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: 4
Всего: 41



Цитата(SoWa @ 18.2.2006, 21:35 Найти цитируемый пост)
Пиши на Алголе тогда. Не режь нам глаза, а?

smile Стоп. Алгол полностью вымер. smile Программистское сообщество понесло большие потери, особенно в СССР, уделив слишком много внимания этому языку и придав ему особенное значение. Тем не менее, очень много хороших алгоритмов написанно именно на нем. Против языка ничего не имею, но считаю его перегруженным и не глубоко продуманным (например, взять подвижные массивы).
PM MAIL ICQ   Вверх
Cr@$h
Дата 25.8.2006, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: 4
Всего: 41



Цитата(dpa @  16.2.2006,  01:58 Найти цитируемый пост)
Жаль плюсы лепить не могу. В общем <+> заочно ;) 


Добавлено @ 17:32 

M
Cr@$h
Done.

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Добро пожаловать в раздел "Другие языки" форума Vingrad!

Void
Void

Раздел посвящён различным языкам программирования, для которых (в силу невысокой популярности) нет отдельного раздела (GPSS, Lua, MATLAB, Ada, Forth, Smalltalk, Tcl, REXX, AWK и др.)

  • Обязательно следуйте правилам Форума.
  • Пожалуйста, прочитайте и следуйте рекомендациям по работе в разделе и навигации по Форуму.
  • Для вставки текстов исходных кодов используйте подсветку синтаксиса из выплывающего списка Код в форме ответа. Если Ваш язык в списке не представлен, то используйте тег: [code=ваш_язык]код[/code], например, [code=ada]код[/code]. Если в будущем подсветка синтаксиса для указанного языка будет реализована, исходный код преобразится.
  • Помните, один вопрос - одна тема.

Приятного времяпрепровождения! С уважением, Void, kemiisto .

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Другие языки | Следующая тема »


 




[ Время генерации скрипта: 0.1561 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.