Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 01.10.2019
Сообщений: 25

Программа на вывод месяцев года, которые начинаются в один день недели

15.12.2019, 18:01. Показов 2508. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Разработайте программу перечисления всех месяцев указанного или текущего года, которые начинаются в одинаковый день недели. Требуемый номер года должен передаваться программе аргументом командной строки ее вызова. При этом, если год не указан, то должен рассматриваться текущий год. Искомый результат должен отображаться в 7 строках потока стандартного вывода. В каждой строке должны быть записаны аббревиатуры названий дня недели (пн, вт, ср и т.д.) и всех месяцев, которые начинаются в этот день.

Добавлено через 3 часа 9 минут
Написал свое подобие скрипта, вывод почти правильный, но вместо корректных месяцев выводит только "Jan"
Например, при запуске без аргументов вывод:

Monday - Jan
Tuesday - JanJan
Wednesday - JanJan
Thursday - JanJan
Friday - JanJan
Saturday - JanJan
Sunday - Jan

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/bash
 
now=`date +"%Y"`
other=${1:-0}
year=`expr "$other" \| "$now"`
months=(01 02 03 04 05 06 07 08 09 10 11 12)
days=()
names=(empty Monday Tuesday Wednesday Thursday Friday Saturday Sunday)
for i in ${months[@]}; do
    var1=`date -d "01/$i/$year" +"%b"`
    var2=`date -d "01/$i/$year" +"%u"`
    days[var2]=${days[var2]}$var1
done
 
for i in 1 2 3 4 5 6 7
do
echo "${names[i]} - ${days[i]}"
done
Добавлено через 7 минут
Исправил.
Bash
1
2
var1=`date -d "$i/01/$year" +"%b"`
    var2=`date -d "$i/01/$year" +"%u"`
Как добавить в выводе пробел между месяцами? (чтобы было не JanFeb, а Jan Feb)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.12.2019, 18:01
Ответы с готовыми решениями:

Известна дата и день недели некоторого события. Определить, на какой день недели приходится начало года
Известна дата и день недели некоторого события. Определить, на какой день недели приходится начало года.

Известна дата и день недели некоторого события. Определить на какой день недели приходится начало года
Известна дата и день недели некоторого события. Определить на какой день недели приходится начало года. Использовать множества и не...

Даты года, на которые в каждом месяце последний раз выпадает заданный день недели
Разработать программу для перечисления всех дат любого указанного или текущего года, на которые в каждом месяце последний раз выпадает...

5
Эксперт NIX
 Аватар для nezabudka
3334 / 752 / 252
Регистрация: 28.06.2015
Сообщений: 1,552
Записей в блоге: 16
15.12.2019, 19:35
Bash
1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
 
year=${1:-$(date +%Y)}
 
for j in {4..11}; do
        echo -n "$(date -d@$((86400*j)) +%a) "
        for i in {1..12}; do
                mon=$(date -d$year-$i-1 +%b%u | grep $j'$')
                echo -n "${mon//[1-7]/ }"
        done
        echo
done
Добавлено через 9 минут
...
0
Покинул форум
3701 / 1484 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
15.12.2019, 19:37
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/env bash
 
if [[ $# -ne 1 ]]; then
  echo -e "\033[31;1mАргумент вне допустимого диапазона.\033[0m"
  return
fi
 
declare -A hash
for i in `seq 1 12`; do
  read a b <<< $(date -d "$1-$i-1" +'%a %b')
  [[ ${hash[$a]}+$a ]] && hash[$a]="$(echo ${hash[$a]}), $b" || hash[$a]=$b
done
 
for i in "${!hash[@]}"; do
  echo -e "$i -${hash[$i]/,/}"
done
unset hash
0
Эксперт NIX
 Аватар для nezabudka
3334 / 752 / 252
Регистрация: 28.06.2015
Сообщений: 1,552
Записей в блоге: 16
15.12.2019, 20:10
Исправила одно, а сломала другое, в продакшн
Bash
1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
 
year=${1:-$(date +%Y)}
 
for j in {1..7}; do
        echo -n "$(date -d@$((86400*(j+3))) +%a) "
        for i in {1..12}; do
                mon=$(date -d$year-$i-1 +%b%u | grep $j'$')
                echo -n "${mon//[1-7]/ }"
        done
        echo
done
0
Покинул форум
3701 / 1484 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
15.12.2019, 23:32
Bash
1
2
3
4
#!/usr/bin/env bash
 
[[ $# -eq 1 ]] && year=$1 || year=$(date +%Y)
echo {1..12}|xargs -d' ' -I{} date -d$year-{}-1 +'%a %b'|awk -F' ' '{a[$1]=a[$1] ? a[$1]","$2 : $2}END{for (i in a) if (length(a[i]) > 3) print i, a[i]}'
0
0 / 0 / 0
Регистрация: 09.12.2021
Сообщений: 2
20.12.2021, 11:37
Чтобы был пробел, надо написать так:
days[var2]=${days[var2]}" "$var1
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.12.2021, 11:37
Помогаю со студенческими работами здесь

Перечислить даты года, на которые в каждом месяце последний раз выпадет заданный день недели
Разработать программу для перечисления всех дат любого указанного или текущего года, на которые в каждом месяце последний раз выпадет...

По текущей дате и дню недели определить день недели с такой же датой заданного года
По текущей дате и дню недели определить день недели с такой же датой заданного года. (C++ )

С сентября 2014 года по некоторый день прошло k месяцев.Определить номер месяца к которому относится этот день
С сентября 2014 года по некоторый день прошло k месяцев.Определить номер месяца к которому относится этот день. (Линейная программа и...

Определить, на какой день недели приходится k-й день невисокосного года
Пусть k – целое от 1 до 365. Присвоить целой переменной n значение 1,2,…6 или 7 в зависимости от того, на какой день недели ( понедельник,...

Определить, на какой день недели проходится k-й день невисокосного года в котором 1 января - понедельник
вводится k-й день года (1&lt;=k&lt;=365).Определить и вывести,на какой день недели проходится k-й день невисокосного года в котором 1...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru