• 締切済み

CASLIIでうるう年を出力

西暦を入れるとうるう年かどうかを判断するプログラムをCASLIIで作りたいのですが。どのようなものにすればよいでしょうか?できればプログラムを書いてくれると助かります。

みんなの回答

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.7

>これであってるんですよね? あってるつもりですけど、 (補足要求に応えずに)再掲することにどんな意味が?

全文を見る
すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.6

>エラーが出るのですが・・・ どんな環境で、どんなエラーがでたかとかなしに エラーが出るじゃわかりませんが・・・ もし、日本語を使用できないんだったら適当に変更すればいいし、 プログラムがメインと呼び出すルーチンに分かれているのが問題であれば、くっつければいいし、 ぶつぶついっててもしょうがないと思うけど・・

noname#15433
質問者

補足

MAIN START LD GR0,AD CALL ISLEAP CPL GR0,=1 JZE YES NO OUT MSGNO,NOLEN JUMP EXIT YES OUT MSGYES,YESLEN EXIT RET AD DC 2000 MSGYES DC '閏年です' YESLEN DC 8 MSGNO DC '閏年ではない' NOLEN DC 12 END ISLEAP START ST GR0,YEAR LOOP400 SUBA GR0,C400 JZE TRUE JPL LOOP400 ADDA GR0,C400 LOOP100 SUBA GR0,C100 JZE FALSE JPL LOOP100 ADDA GR0,C100 LOOP4 SUBA GR0,C4 JZE TRUE JPL LOOP4 JUMP FALSE TRUE LAD GR0,1 JUMP EXIT FALSE LAD GR0,0 EXIT RET YEAR DS 1 C400 DC 400 C100 DC 100 C4 DC 4 END これであってるんですよね?

全文を見る
すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.5

#4>できたプログラムを書いてくれませんか? 書いたつもりなんですが・・

noname#15433
質問者

補足

いや~書いてみたんですけどエラーが出るのですが・・・

全文を見る
すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

ついでに#2の方針のものを挙げときます。 範囲チェックがないけど・・ ---------------------------------------------------------------- ;閏年の判定をする ;IN:GR0 YEAR ;OUT:GR0 1:閏年,0:平年 ;西暦を400で割って余りが0の時無条件で閏年。 ;そうでない時 ;4で割って余りが無くてかつ100で割り切れない時閏年。 ISLEAP START ST GR0,YEAR LOOP400 SUBA GR0,C400 ;400で引く JZE TRUE ;0なら余りなし JPL LOOP400 ;正の間繰り返し ADDA GR0,C400 LOOP100 SUBA GR0,C100 ;100で引く JZE FALSE ;0なら割り切れる JPL LOOP100 ;正の間繰り返し ADDA GR0,C100 LOOP4 SUBA GR0,C4 ;4で引く JZE TRUE ;0なら余りなし JPL LOOP4 ;正の間繰り返し JUMP FALSE ;割り切れない TRUE LAD GR0,1 JUMP EXIT FALSE LAD GR0,0 EXIT RET YEAR DS 1 C400 DC 400 C100 DC 100 C4 DC 4 END ; MAIN START LD GR0,AD CALL ISLEAP CPL GR0,=1 JZE YES NO OUT MSGNO,NOLEN JUMP EXIT YES OUT MSGYES,YESLEN EXIT RET AD DC 2000 ;閏年 MSGYES DC '閏年です' YESLEN DC 8 MSGNO DC '閏年ではない' NOLEN DC 12 END

noname#15433
質問者

補足

全然できません。わからないんで、みずらくてもいいですから、できたプログラムを書いてくれませんか?お願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

#1補>どこを変えたら年を入力してうるう年かうるう年でないか出るプログラムを作れますか? #1の補のプログラムの場合、 GR1に、年,月,日の先頭アドレスが設定された状態で呼び出されて、 日付のチェックをして 問題なければGR0に0を設定 問題があればGR0に1を設定するプログラムで 閏年の判定をしている部分は  LD GR3,0,GR1 ;GR3に年  AND GR3,=3 ;4で割ったときの余りがあるか  JNZ HEINEN ;余りがあるので平年  LD GR3,0,GR1 ;もう一度年を読み込む  LAD GR4,0 ;GR4をカウンタとして LOOP ADDA GR4,=1 ;100を引けた数を数える  SUBA GR3,=100 ;100を引く  JPL LOOP ;プラスでなくなるまでループ  JNZ URUU ;ちょうど0にならなかったら  AND GR4,=#0003 ;100を引けた数を4で割った余りを出す  JNZ HEINEN ;余りがある時、400で割り切れなかったので平年 の部分です。 コメントを付けたようになっているので、 ジャンプ先のHEINEN あるいは URUU で 決めた返値を決めたレジスタに設定してリターンするようにすれば良いと思います。

全文を見る
すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

経験的に、このような質問の場合、(アセンブラの場合必然ステップが 長くなるため)頑張ってプログラムを書いても削除されてしまう(つまり、こういうプログラムを作ったけど動かないとかうまくいかないとかでなく、丸投げとか依頼の場合)ので、アドバイスのみ。 西暦を400で割って余りが0の時無条件で閏年。 (ココで判定処理終わり) そうでない時 4で割って余りが無くてかつ100で割り切れない時閏年。 アセンブラの場合割り算や余りの処理は、結構面倒だけど、 この場合、入力が西暦ということもあってたかだか4桁の整数なので、 余りがあるかないかは、繰り返し引き算して0になれば余り無し マイナスになってしまえば割り切れなかったと判定できます。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

作れないのは、うるう年のルールを知らないせいとして解答します。 うるう年は次のルールで決まります。 1.西暦が4で割り切れる年は閏年とする。 2.ただし、西暦が100で割り切れる年は閏年にしない。 3.ただし、西暦が400で割り切れる年はやっぱり閏年にする。 上記のルールでプログラムを書けば良いでしょう。

noname#15433
質問者

補足

主プログラム MAIN START  LAD GR1,YYMMDD  CALL DATA  RET  YYMMDD DC 2000,8,31  END   DATA START RPUSH LD GR2,1,GR1  CPA GR2,=12  JPL ERROR  CPA GR2,=1 JMI ERROR  LD GR2,2,GR1  CPA GR2,=1  JMI ERROR LD GR2,1,GR1  CPA GR2,=2  JNZ NOT2  LD GR3,0,GR1 AND GR3,=3  JNZ HEINEN  LD GR3,0,GR1  LAD GR4,0 LOOP ADDA GR4,=1  SUBA GR3,=100  JPL LOOP JNZ URUU  AND GR4,=#0003  JNZ HEINEN URUU LAD GR3,29  JUMP CHKDD  HEINEN LAD GR3,28 JUMP CHKDD  NOT2 LD GR3,GR2  SRL GR3,3 ADDA GR3,1,GR1  AND GR3,=#0001  ADDA GR3,=30 CHKDD CPA GR3,2,GR1  JMI ERROR  LAD GR0,0 END RPOP   RET   ERROR LAD GR0,1  JUMP END END このような、プログラムがあるのですが(改行するところは間が多めです)どこを変えたら年を入力してうるう年かうるう年でないか出るプログラムを作れますか?(見ずらくてごめんなさい)

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 閏年について

    Excelで「1900/2/29」と入力すると、閏年でないのに、日付として認知され、標準表示形式では「60」と表示されます。1900年は閏年として認識しているのでしょうか?Visual Basicで西暦と和暦のプログラムを作成(1900年未満)している途中で計算が合わなくなり、この疑問にぶつかりました。回答をよろしくお願いします。

  • 閏年のプログラム

    C言語(閏年)の質問です。 任意の範囲の年から閏年の表示とその数をカウントして次の実行結果のように表示するプログラムの作成で途中まではわかって修正・追加する箇所があったら一緒に教えてください。(ここでは2つの年をmain関数内で入力し、その範囲の西暦を引数とする関数checkYearを使用するものとする。int型の関数checkYearは、引数に西暦をとり、その西暦が閏年であれば、1を返し、閏年でない場合は0を返す。) なお、閏年の判定方法は以下のとおりである。 条件1 西暦年が4で割り切れる年は閏年である 条件2 条件1を満たしていても、西暦年が100で割り切れるときは閏年でない 条件3 条件2を満たしていても、西暦年が400で割り切れるならば閏年である 実行例1 西暦を入力:2000 西暦を入力:2009 2000年 2004年 2008年 閏年は3回あります。 実行例2 西暦を入力:2100 西暦を入力:2000 2000年 2004年 2008年 2012年 2016年 2020年 (省略) 2096年 閏年は25回あります。 実行例3 西暦を入力:2090 西暦を入力:2110 2092年 2096年 2104年 2108年 閏年は4回あります。 #include <iostream> bool checkYear(int year); int main() { int year; int year2; printf("西暦を入力:"); scanf("%d",year); printf("西暦を入力:"); scanf("%d",year2); int count = 0; for (int i = year; i < year2; i++) { if (checkYear(i)) { printf("%d年\n"); count++; } } printf("閏年は%d回です。\n"); return 0; } bool checkYear(int year) { return (((year % 4) == 0) && ((year % 100) != 0)) || ((year % 400) == 0); }

  • 閏年と平年の求め方

    うるう年は西暦年が4で割り切れる年。   ただし100で割り切れても400で割り切れないときは閏年としない 平年は閏年でない年 2001年から2401年の400年の間にうるう年は何回あるかを求める。 この問題なんですがどうやって計算すればいいか解りません。 なるべく式も一緒に教えて下さい。 宜しくお願いします。

  • うるう年かどうかを計算するプログラミング

    西暦何年かを入力し、その年がうるう年かそうでないかを 計算するプログラムを作っています。 #include <iostream> using namespace std; int main() { int toshi; cout <<"西暦を入力してください"; cin>>toshi; if (toshi%4==0) {if (toshi%100==0) {if (toshi%400==0) {cout<<toshi<<"年はうるう年です。";} else {cout<<toshi<<"年は非うるう年です。";} else {cout<<toshi<<"年は非うるう年です。";} else {cout<<toshi<<"年は非うるう年です。";}}} return EXIT_SUCCESS; } これを入力したのですが エラーが2つでてしまいます。 どこがちがうのでしょうか?

  • CASLIIでかけ算

    CASLIIでかけ算をしたいのですが、どのようなプログラムを組めばよいのでしょうか?

  • うるう年を求めるプログラム

    1900から2100年のうるう年を求めるプログラムが作りたいのですが どうしたらよいでしょうか? forを使って1900から2100までかぞえる。 4で割り切れるものは閏年 しかし100で割り切れるものは閏年でない。 400で割り切れるものは閏年である。 最後の条件の分岐から閏年のみを表示させたいのですがわかりません 。

  • 西暦を入力して、うるう年かどうか判定せよ!という問題です。

    西暦を入力して、うるう年かどうか判定せよ。ただしうるう年の条件は4で割り切れる、100で割り切れない、400で割り切れる。という問題です!!誰か教えて下さい!お願いします~。

  • bash 閏年

    shellについて初めて勉強しています。 複数のコマンドライン引数で西暦を与えると,閏年かどうか判定する bashのファイルを作成しているのですが, なかなかうまくいきません。 どのように改善したらよいでしょうか? #!/bin/bash if [ ${DATE_YYYY}%4 -eq 0 -a \ ! ${DATE_YYYY}%100 -eq 0 -o \ ${DATE_YYYY}%400 -eq 0 ] then # 閏年 else # 閏年以外 fi

  • CASLIIで三角形の面積を求めたいのですが

    CASLIIを使ったプログラムについて教えて下さい。 三角形の面積を求めたいです。 底辺の長さ6 高さ12 の三角形から 底辺2 高さ8 の長方形を切り取った時の面積を求めたいのですが、どうすれば良いでしょうか? ヒントだけでも、お書きいただければ幸いです

  • CASLIIのプログラム(並び替え)について

    CASLIIのプログラミングで直接選択ソートまたはバブルソートを用いた1~5までの数字の大きい順に並び替え、というものがあります。C言語でしたらわかるのですがCASLIIだといまいちわかりません。直接選択ソート、バブルソートの原理はわかるのですが。 CASLIIのプログラムの形で答えを教えてください。なおプログラムは部分的に        START   BGN BGN          RET DATA    DC    1,4,3,2,5         END となっています。 よろしくお願いします。

無線のmesh環境でのひかりTV利用
このQ&Aのポイント
  • 無線のmesh環境でのひかりTV利用について教えてください
  • 現在は有線接続でひかりTVを利用していますが、無線での接続方法を知りたいです
  • 現在の接続方法だとテレビで地デジやYouTubeなどのアプリが視聴できますが、無線での接続にすると視聴できなくなるので、適切な接続方法を教えてください
回答を見る