質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

Q&A

解決済

3回答

408閲覧

Perlで設定したカレンダーが正しく表示されない

chanyamachan

総合スコア5

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

0グッド

0クリップ

投稿2022/06/15 15:34

Perlで設定したカレンダーを表示したいのですが、所望の動作にならず困っています。

★実行結果
Seireki 2005 year 6 month

Sun Mon Thu Wed Thu Fri Sat

※日付が出てこないです

下記がソースコードになります。
何か改善点等ございましたら、ご教示の程よろしくお願いいたします。
★ソースコード
3 #######################Setting Calendar###################
4
5 $year = 2005 ;
6 $month = 6 ;
7 $days = &getMonthdDays($year, $days) ;
8
9 &printCalendar($year, $month, $days) ;
10
11
12 ####################Get a date######################
13
14 sub getMonthdDays{
15 local ($y, $m) = @_ ;
16
17 if($m == 1 || $m == 3 || $m == 5 || $m == 7 ||
18 $m == 8 || $m == 10 || $m == 12 ){
19 return 31 ;
20 }
21 elsif($m == 4 || $m == 6 || $m == 9 || $m == 11 ){
22 return 30 ;
23 }
24 elsif($m ==2){
25 if($y % 4 == 0 && $y %100 == 0 || $y % 400 == 0 ){
26 return 29 ;
27 }
28 else{
29 return 28 ;
30 }
31 }
32 else{
33 return 0 ;
34 }
35 }
36
37
38 #######################Get a day###################
39 ##return value, 0:Sun 1:Mon 2:Thu 3:Wed 4:Thu 5:Fri: 6:Sat##
40
41 sub getweekday{
42 my ($y, $m, $d) = @_ ;
43 if($m == 1 || $m ==2){
44 $y-- ;
45 $m += 12 ;
46 }
47 ##Zeller's congruence##
48 my $w = ($y + int($y / 4) - int($y / 100)
49 + int($y / 400) + int((13 * $m + 8) / 5) + $d) % 7 ;
50 return $w ;
51 }
52
53
54 #################Display Calender####################
55
56 sub printCalendar{
57 ($y, $m, $d) = @_ ;
58 $week = &getweekday($y, $m, 1) ;
59
60 print "\nSeireki $y year $m month \n" ;
61 print "--------------------------------\n" ;
62 print "Sun Mon Thu Wed Thu Fri Sat \n" ;
63 print "--------------------------------" ;
64
65 for($i = 0; $i < $week; $i++){
66 print " " ;
67 }
68 $w = $week ;
69 for($i = 1; $i <= $d; $i++){
70 if($w % 7 == 0 && $w >= 6){
71 print "\n" ;
72 }
73 printf("%4d", $i) ;
74 $w++;
75 }
76 }
77

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tatsu99

2022/06/15 20:53 編集

ソースが見づらいので、以下の方法でアップしなおしてください。 以下のようにすると、きちんとソースが表示されます。 </>をクリックします。 ```ここに言語を入力 コード ``` と表示されるので ```① ② ``` ①の箇所にperlと入力し ②の箇所にソースをコピペして貼り付けます。 そうすると、きちんと表示されます。 尚、行番号は不要です。行番号はつけないでください。
guest

回答3

0

$month = 6 ; $days = &getMonthdDays($year, $days) ;

        ↓

$month = 6; $days = &getMonthdDays($year, $month) ;

投稿2022/06/15 23:06

sigsegv

総合スコア895

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chanyamachan

2022/06/16 00:13

ありがとうございます。 無事解決しました。
guest

0

ベストアンサー

以下のようにしてください。
修正箇所には、#modify #add等のコメントを付加しています。
5行目の
$days = &getMonthdDays($year, $days);を
$days = &getMonthdDays($year, $month);に変えれば、基本的には動作します。
上記以外は、体裁のためです。

perl

1#######################Setting Calendar################### 2 3$year = 2005 ; 4$month = 6 ; 5$days = &getMonthdDays($year, $month) ; #modify 6 7&printCalendar($year, $month, $days) ; 8 9 10#######################Get a date######################### 11 12sub getMonthdDays{ 13 local ($y, $m) = @_ ; 14 15 if($m == 1 || $m == 3 || $m == 5 || $m == 7 || 16 $m == 8 || $m == 10 || $m == 12 ){ 17 return 31 ; 18 } 19 elsif($m == 4 || $m == 6 || $m == 9 || $m == 11 ){ 20 return 30 ; 21 } 22 elsif($m ==2){ 23 if($y % 4 == 0 && $y %100 == 0 || $y % 400 == 0 ){ 24 return 29 ; 25 } 26 else{ 27 return 28 ; 28 } 29 } 30 else{ 31 return 0 ; 32 } 33} 34 35 36#######################Get a day########$################### 37##return value, 0:Sun 1:Mon 2:Thu 3:Wed 4:Thu 5:Fri: 6:Sat## 38 39sub getweekday{ 40 my ($y, $m, $d) = @_ ; 41 if($m == 1 || $m ==2){ 42 $y-- ; 43 $m += 12 ; 44 } 45##Zeller's congruence## 46 my $w = ($y + int($y / 4) - int($y / 100) 47 + int($y / 400) + int((13 * $m + 8) / 5) + $d) % 7 ; 48 return $w ; 49} 50 51 52####################Display Calender######################### 53 54sub printCalendar{ 55 ($y, $m, $d) = @_ ; 56 $week = &getweekday($y, $m, 1) ; 57 58 print "\nSeireki $y year $m month \n" ; 59 print "--------------------------------\n" ; 60 print "Sun Mon Thu Wed Thu Fri Sat \n" ; 61 print "--------------------------------\n" ; 62 63 for($i = 0; $i < $week; $i++){ 64 print " " ; #modify 65 } 66 $w = $week ; 67 for($i = 1; $i <= $d; $i++){ 68 if($w % 7 == 0 && $w >= 6){ 69 print "\n" ; 70 } 71 printf("%4d", $i) ; 72 $w++; 73 } 74 print "\n"; #add 75 76} 77

投稿2022/06/15 23:05

tatsu99

総合スコア5438

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chanyamachan

2022/06/16 00:14

体裁含めご教示ありがとうございます。 日付が出力され解決しました。
guest

0

ご教示ありがとうございます。
ソースコードを張り直しました。
よろしくお願いいたします。

perl

1#######################Setting Calendar################### 2 3$year = 2005 ; 4$month = 6 ; 5$days = &getMonthdDays($year, $days) ; 6 7&printCalendar($year, $month, $days) ; 8 9 10#######################Get a date######################### 11 12sub getMonthdDays{ 13 local ($y, $m) = @_ ; 14 15 if($m == 1 || $m == 3 || $m == 5 || $m == 7 || 16 $m == 8 || $m == 10 || $m == 12 ){ 17 return 31 ; 18 } 19 elsif($m == 4 || $m == 6 || $m == 9 || $m == 11 ){ 20 return 30 ; 21 } 22 elsif($m ==2){ 23 if($y % 4 == 0 && $y %100 == 0 || $y % 400 == 0 ){ 24 return 29 ; 25 } 26 else{ 27 return 28 ; 28 } 29 } 30 else{ 31 return 0 ; 32 } 33} 34 35 36#######################Get a day########$################### 37##return value, 0:Sun 1:Mon 2:Thu 3:Wed 4:Thu 5:Fri: 6:Sat## 38 39sub getweekday{ 40 my ($y, $m, $d) = @_ ; 41 if($m == 1 || $m ==2){ 42 $y-- ; 43 $m += 12 ; 44 } 45##Zeller's congruence## 46 my $w = ($y + int($y / 4) - int($y / 100) 47 + int($y / 400) + int((13 * $m + 8) / 5) + $d) % 7 ; 48 return $w ; 49} 50 51 52####################Display Calender######################### 53 54sub printCalendar{ 55 ($y, $m, $d) = @_ ; 56 $week = &getweekday($y, $m, 1) ; 57 58 print "\nSeireki $y year $m month \n" ; 59 print "--------------------------------\n" ; 60 print "Sun Mon Thu Wed Thu Fri Sat \n" ; 61 print "--------------------------------\n" ; 62 63 for($i = 0; $i < $week; $i++){ 64 print " " ; 65 } 66 $w = $week ; 67 for($i = 1; $i <= $d; $i++){ 68 if($w % 7 == 0 && $w >= 6){ 69 print "\n" ; 70 } 71 printf("%4d", $i) ; 72 $w++; 73 } 74}

投稿2022/06/15 22:29

chanyamachan

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問