JavaでForループ攻撃!不倫に自粛無視とは何事か!!

Java自作サンプルに戻る
これからプログラミングを始める方へ
プログラミングと資格
息抜きに、写真で癒し(=^・^=)

お昼にバライティ―番組を見ました。
「アッコにおまかせ!」という、
和田アキ子さんが司会を務める番組です。
今日(令和2年6月28日)は、不倫騒動の
渡部建や、コロナで自粛無視の手越祐也について、
色々とやっていました。

この2人、皆さん、正直どうですか??
ムカツクでしょ?
え?ムカつきません??

あなた、仏ですね( ´艸`)

私は、ああいうチャラい感じのオッサン(2人ともオッサンですよ。)
むっかむかですね。

そこで、渡部建と手越祐也に、
頭上から「うんこ」投下と、
鼻から「しょんべん砲」を発射という攻撃を
Javaのループを使って行うことにしました。

フローチャートはこちらです。
名前が「汚名前」になっている所がポイントです。

まず、渡部建から。
汚名前を入力します。

攻撃方法を「1:うんこ」にします。

10から100トンまでの重さのうんこを、
渡部建の頭上に投下しました。
カウンタは10ずつカウントアップしています。

では、次に手越祐也。
汚名前を入力します。

攻撃方法を「2:しょんべん砲」にします。
外ループで10~30リットル、内ループで鉄砲の大きさを掛け算しています。

芸能人は、一般人の模範であるべき!!
私は、模範になる様な行動を取っている方しか
応援しません。
どうにかこれで怒りが収まり、安心して、
基本情報技術者試験のアルゴリズムと言語(CASL2)の勉強が出来ます。
勉強しようと思ったら、何だかムカムカしてきたので、
このプログラムを作ってみました。

もしも、ファンの方、この記事を読んで笑えなかったらごめんなさい。
それなりにウケ狙っていたのですが、笑えましたか?

では、最後にプログラムです。

import java.util.Scanner;

public class ChoMuKa{

public static void main(String[] args){
Scanner scn = new Scanner(System.in);

//汚名前と攻撃方法とループカウンタ変数
String wonamae;
int houhou,i,j,k;
System.out.println(“攻撃対象の「汚名前」・・・> “);
wonamae=scn.next();
System.out.println(wonamae+”に対して「頭上にうんこ」:1、「水鉄砲でしょんべん砲」:2・・・> “);
houhou=scn.nextInt();

//うんこを頭上から落とす場合
if(houhou==1){
for(i=10;i<=100;i+=10){
System.out.println(wonamae+”の頭上から”+i+”トンの【うんこ】を投下した”);
}
}

//しょんべん鉄砲を発射する場合
else{
for(j=10;j<=30;j+=10){
for(k=200;k<=400;k+=100){
System.out.println(wonamae+”の鼻の穴の中に”+j+”×”+k+”=”+j*k+”リットルの【しょんべん砲】を発射した”);
}
}
}
}
}

ここまで読んで下さって、誠にありがとうございました。
もしも、この記事がちょっとでもお役に立てていましたら、
お手数ですが、あなたのSNSやブログで広めて頂けたら嬉しいです。

このプログラムを作るにあたって、勉強になった本を紹介します。

Java自作サンプルに戻る
これからプログラミングを始める方へ
プログラミングと資格
息抜きに、写真で癒し(=^・^=)

Javaで自分探し。Whileループと配列とフラグ

Java自作サンプルに戻る
これからプログラミングを始める方へ
プログラミングと資格
息抜きに、写真で癒し(=^・^=)

自分探しの旅など、かつて行かれた方もいらっしゃるかもしれません。
特にロスジェネさん、自分探し大好きですよね。
私はボチボチですが。
旅などをして、何か見つけられたら良いのですが、
時間もお金も労力もかかるので、
もっと手軽に出来ることもあるかもしれないと
思って、Javaによるプログラミングで
「好き」と「キライ」に分ける処理をやってみようと思います。

入力フラグ=1である限り、
ずっと入力できます。

好きだったら1、キライだったら0を入力して、
それぞれ「好き配列」と「キライ配列」に格納します。

フローチャートはこちらです。
フローチャートは、draw.ioというサービスを使っています。
実は、ループ処理の図形が無いので、どうやって作るのか
調べていた所、左側の検索窓に「loop」と入れたら見つかりました。

下記の項目について実行しました。

・ねこあつめ…>すき
・プログラミング…>すき
・そうじ…>キライ
・せんたく…>キライ
・ゴキ…>キライ

入力過程と実行結果について、
まず、最初の項目である、「ねこあつめ」と入れます。
好きなので「1」を入れます。
入力を続けるので「1」を入力します。

ということを繰り返して、
最後の項目を入れたら、入力を終えるので、
「0」を入れます。

すると、
好きなことの項目を好き配列に、
キライなことの項目をキライ配列にそれぞれ格納した結果が表示されます。

実行結果から、私は掃除がキライですが、
Gがキライなので、掃除、ちゃんと頑張らないといけないみたいですね。

自分探しの基本は、何が好きか、嫌いか分けることかもしれません。

では、良い人生を。

import java.util.Scanner;
import java.util.ArrayList;


public class jibunsagashi{
public static void main(String[] args){
Scanner scn = new Scanner(System.in);

ArrayList sukiretsu=new ArrayList();
ArrayList kirairetsu=new ArrayList();
String koumoku;
int ioFlag,konomi,i,j;

ioFlag=1;

//項目の入力と好き嫌いの分岐のwhileループ
while(ioFlag==1){
System.out.println(“自分探しの項目を入力してにゃ(=^・^=)・・・> “);
koumoku=scn.next();
System.out.println(koumoku+”は好き:1、キライ:0・・・> “);
konomi=scn.nextInt();
//その項目が好きな場合
if(konomi==1){
sukiretsu.add(koumoku);
System.out.println(“入力を続ける:1、終わる:0・・・>”);
ioFlag=scn.nextInt();
}
//その項目がキライな場合
else{
kirairetsu.add(koumoku);
System.out.println(“入力を続ける:1、終わる:0・・・>”);
ioFlag=scn.nextInt();
}
}
//whileループの終了

System.out.println(“◆好きなこと”);
System.out.println(sukiretsu);
System.out.println(“—————————–“);
System.out.println(“◆キライなこと”);
System.out.println(kirairetsu);
}
}

ここまで読んで下さって、誠にありがとうございました。
もしも、この記事がちょっとでもお役に立てていましたら、
お手数ですが、あなたのSNSやブログで広めて頂けたら嬉しいです。

このプログラムを作るにあたって、勉強になった本を紹介します。

Java自作サンプルに戻る
これからプログラミングを始める方へ
プログラミングと資格
息抜きに、写真で癒し(=^・^=)

JavaでSNSでの繋がりを判断しよう

Java自作サンプルに戻る
これからプログラミングを始める方へ
プログラミングと資格
息抜きに、写真で癒し(=^・^=)

TwitterなどのSNSで、ブロックやミュートなどの判断は、
その人によって異なりますよね。
私の場合の判断基準をJavaで簡単にプログラミングしました。
(この程度で2日かかったから、まだまだ勉強不足だな。)

私がブロックする条件
・反社会的(暴力や法に触れるような発言)
・いきなり宣伝のDMを送り付けて来るテイカー(クレクレ星人)

私がミュートする条件
・自分とは意見が合わなくて折り合い付けられなさそうな人
(例えば、貯金はするな、や、行動しろ!等の意識高い疲れる系の人たち)

私の身の安全や、精神衛生上の為、
行為った措置を取っています。

それ以外の方は基本、ゆるく交流します。

今までの文章をフローチャートにすると、こうなります。
これはdraw.ioという無料のWeb上での作成が出来るサービスを使ってみました。
使い方の説明   draw.io

では、上記の処理を、「ドラえもん」、
「HUNTER×HUNTER(ハンターハンター)」
「CCさくら(カートキャプターさくら)」のキャラクターを通してお話しします。

まず最初にミュートする場合。
あなたは「野比のび太」くんです。
最近スネ夫くんのSNSに疲れてきてしまいました。

「また、ラジコン買ってもらったとか自慢している、
スネ夫の投稿、疲れるんだよね。」

のび太君はそう呟きながらTLを見ていました。
さて、今後スネ夫くんとは、どういう繋がりを持って行くのか
模索するのび太くん。

スネ夫くんは、
・反社会的ではない
・いきなりDMを送り付けてもこない
・でも、自慢が多くて…これは違和感だな。

実行結果です。

次に、HUNTER×HUNTERのキャラクターで「ブロック」のお話をします。
あなたは幻影旅団に復讐の念を抱くクラピカです。

旅団に大切な仲間を奪われた。
悔しさ、怒り、憤り
クラピカは旅団の公式アカウントを見つけました。

旅団は、
・反社会的…当然だ。
・いきなりDM…FF外は拒否しているから、これは無い。
・意見…これは論外だ

実行結果です。

最後に「CCさくら」のキャラクターで「フォロー継続」のお話をします。
あなたは大道寺知世ちゃんです。
親友のさくらちゃんのツイートを見るのが幸せです。

さくらちゃんは

・反社会的、なわけないですわ。
・DM、さくらちゃんはそんなことしませんわ。
・違和感、いいえ、むしろ喜びですわ。

実行結果です。

さくらちゃんのツイートは通知して、常にチェックですわ。

最後にプログラムです。
Yesを「1」、Noを「0」と入力して、
条件判断でIF文の中でORを使い、
Else if、Elseと分岐していきます。

import java.util.Scanner;
public class snshandan{
public static void main(String[] args){


//今後の繋がりを考える相手の名前
String name;

//反社会的か、いきなりDMか、意見が合わないかのチェック用
int hansha,ikinaridm,iken;

Scanner scn = new Scanner(System.in);
System.out.print(“そのアカウントの人のお名前=”);
name=scn.next();

System.out.println(name+”さんとの今後の繋がりについて、「yes=1」か「no=0」で答えて下さい”);

System.out.println(name+”さんは反社会的ですか?・・・”);
hansha=scn.nextInt();

System.out.println(name+”さんはいきなりDMを送り付けて宣伝してきますか?・・・”);
ikinaridm=scn.nextInt();

System.out.println(name+”さんの意見に違和感がありますか?・・・”);
iken=scn.nextInt();

//反社会的またはいきなりDMではブロックする
if((hansha==1)||(ikinaridm==1)){
System.out.println(name + “さんをブロックしましょう”);
}
//意見に違和感がある場合はミュートする
else if(iken==1){
System.out.println(name + “さんをミュートしましょう”);
}
//上記に当てはまらなければ繋がる
else{
System.out.println(name + “さんと繋がります。”);
}
}
}

ここまで読んで下さって、誠にありがとうございました。
もしも、この記事がちょっとでもお役に立てていましたら、
お手数ですが、あなたのSNSやブログで広めて頂けたら嬉しいです。

このプログラムを作るにあたって、勉強になった本を紹介します。

Java自作サンプルに戻る
これからプログラミングを始める方へ
プログラミングと資格
息抜きに、写真で癒し(=^・^=)

アセンブラCASL2で「挿入法」を作ってみた

基本情報技術者試験トップへ
アセンブラ自作サンプルへ
アセンブラ過去問プログラムへ
これからプログラミングを始める方へ

2020年からの基本情報技術者試験は、
言語とアルゴリズムの配点が高くなります。
なので、プログラミング未経験の事務員の私は、
非常に焦っています。

そこで、疑似言語によるアルゴリズムを
CASL2で再現してみたら、両方学べて
一石二鳥なのではと思い、今回は「挿入法」を
作ってみました。

私は挿入法が苦手なので、克服するために、
可能な限り最大限に丁寧にトレースしました。
冗長しいかもしれませんが、
あたたかい目で見てもらえると嬉しいです(=^・^=)

気づいたことですが、
挿入法って「ぶち込み法」だと思うと、
分かりやすいのかもしれないです。
挿入法は、既に整列済みの範囲の中に、
今見ている値を適切な位置に順々にぶち込んで行きます。

配列DATAに、「CBEAD」と入力します。
これを「ABCDE」に揃えます。
CASL2では文字コードで大小を判断して、
例えばAなら41、Bなら42…と比較して探します。

この例で行くと、
既に整列済みのCに対して、
今GR1で見ているBをぶち込みます。
この時、GR2で指す範囲は、
配列の先頭の要素0から、GR1より1つ前までです。
GR1が右に進んでいくほど、GR2の動ける範囲が
多くなります。

Bを作業領域(TEMP)のGR3に
退避します。
その後、ループのフラグを「true」にします。
フラグはGR4で示します。
配列DATAの先頭アドレス(固定)をGR5に設定します。
配列DATAの末尾のアドレス(固定)をGR6に設定します。
GR2が指す値をGR7に設定します。

CとBで、Cの方が大きいなので、
Cを1つ右にどかすイメージでコピーします。
GR2を1つ前に移動させます。
GR2が配列の先頭より前になったので、
ループを抜けます。

GR3に退避したBを、
Cがあった所にぶち込むイメージでコピーします。

最初のループ修了では、こうなりました。

これで、要素0にB、要素1にCが来て整列済みになりました。
次はEを要素2のEをぶち込む処理をします。


GR1は要素2のEを指し、GR2は、要素1~要素0の
範囲で動きます。
EはGR3に退避させます。
フラグはtrueです。

CはEより小さいので、
GR4のフラグを「False」にしてループを抜けます。

次は要素3のAを処理します。
GR3にAを退避させます。
ループのフラグをtrueにします。

要素3のAを整列済みのBCDの適切な位置にぶち込んでいきます。
EとAを比べて、Eの方が大きいので、Eを1つ後ろにどかすイメージで
コピーします。
GR2を1つ前に移動させます。

次に、AとCでは、Cの方が大きいので、Cを1後ろに
どかすイメージでコピーします。
GR2を1つ前に移動させます。

次に、AとBでは、Bの方が大きいので、Bを1後ろに
どかすイメージでコピーします。
GR2を1つ前に移動させます。

GR2が配列の先頭より前になったので、ループを抜けます。
GR3に退避したAを要素0にぶち込みます。

最後にDをぶち込む処理をします。

GR3にDを退避させます。
EとDではEの方が大きいので、
Eを右にどかすイメージでコピーします。
GR2を1つ前にします。

次に、CとDを比較します。

Cの方が小さいので、フラグをFalseにして、
ループを抜けます。

Dをぶち込むイメージでコピーします。
これで整列が完了しました。

出力結果になります。

プログラミングです。

TEST START
RPUSH


IN DATA,LEN
OUT DATA,LEN

LAD GR1,DATA
LAD GR1,1,GR1 ;挿入する要素は要素1から
LAD GR5,DATA ;先頭アドレス(固定)
LD GR6,GR5 ;末尾のアドレス(固定)
LAD GR6,4,GR6

LOOP1 CPA GR1,GR6
JPL FIN
LD GR3,0,GR1 ;挿入する要素をTEMPへ退避
LD GR2,GR1 ;整列済み領域アドレスの設定
SUBA GR2,=1
LD GR4,=’true’ ;ループフラグの設定

LOOP2 CPA GR2,GR5 ;整列済み領域と先頭アドレスの位置の比較
JMI SOUNYU
CPA GR4,=’true’
JNZ SOUNYU

LD GR7,0,GR2 ;整列済みの比較している要素の中身をGR7に設定
CPA GR7,GR3 ;整列済みの比較位置の値と退避した値の比較
JMI FFF ;整列済みの方が小さかったらフラグをfalseへジャンプ

LAD GR2,1,GR2 ;整列済みの要素の1つ後ろにどける
ST GR7,0,GR2 ;値を1つ後ろにコピー
LAD GR2,-2,GR2 ;整列済みのアドレス値を戻してひとつ前へ
JUMP LOOP2

FFF LD GR4,=’false’

SOUNYU LAD GR2,1,GR2
ST GR3,0,GR2
LAD GR1,1,GR1
JUMP LOOP1

FIN OUT DATA,LEN

RPOP
RET

DATA DS 5
LEN DC 5

END

読んで下さってありがとうございました。

この記事を書くのに勉強になった本を紹介します。
多分この記事を読んで面白かったと思われた方は、
きっとハマると思います。

◆アルゴリズム問題がちゃんと解ける本
アルゴリズム学習の定番。
アルゴリズムが苦手で何とかしたい方におススメ

◆アルゴリズムはじめの一歩完全攻略
実際に作って学べます。
Javaを使っています。
私はJava初めてでしたが、
それでも、ハッシュ関数の所までは、
どうにかついていけました。
もっと頑張ります。

◆速習言語CASL2
CASL2、何それ、テーマパークの絶叫マシーン
みたいな名前だね、ぐらいだった私でも、入門書として楽しく読めた本です。

◆プログラミング入門CASL2
入門が卒業出来たら、ガシガシ例題解いて、
演習問題を解いて、力を付けたいという時に
読む本です。

基本情報技術者試験トップへ
アセンブラ自作サンプルへ
アセンブラ過去問プログラムへ
これからプログラミングを始める方へ

アセンブラCASL2で「二分探索」を作ってみた

基本情報技術者試験トップへ
アセンブラ自作サンプルへ
アセンブラ過去問プログラムへ
これからプログラミングを始める方へ

2020年からの基本情報技術者試験は、
言語とアルゴリズムの配点が高くなります。
なので、プログラミング未経験の事務員の私は、
非常に焦っています。

そこで、疑似言語によるアルゴリズムを
CASL2で再現してみたら、両方学べて
一石二鳥なのではと思い、今回は「二分探索」を
作ってみました。

二分探索は整列済みの配列から、
目的の値を探します。
探索対象を真ん中の値より大きいか、
小さいかで、範囲を絞って見つけます。
Log2 8=3 で、配列の要素数が8だったら3回の比較、
Log2 16=4 で、要素数が16だったら4回の比較です。

ここで使うHAIRETSUの要素数は10個なので、
4回比較します。

CASL2では文字コードで大小を判断して、
例えばAなら41、Bなら42…と比較して探します。

配列HAIRETSUに「A」から「J」が入っていて、
「H」の要素番号「7」を返すようにします。
GR0に「H」を設定します。

LeftはGR1を、RightはGR2を、
MIDはGR3を使います。
LeftやRight、MIDは、変動するので、
先頭のアドレスをGR4に退避して固定します。
これは後で見つかった位置を返す時に使います。

それぞれのアドレスを指します。
先頭アドレスを仮に「101」とします。
イメージ的にはビジネスホテルの部屋番号みたいなものでしょうか。

左端の部屋は101号室、右端の部屋は110号室。
真ん中の部屋は(101+110)を2で割ります。
CASL2では右に1ビットシフトします。
GR3にGR1を加え、更にGR2を加え、右に1ビットシフトすると、
105号室がGR3になります。

それでは「Eさん」をGR5に呼び出します。

GR5のEさんとGR0のHさんを比べ、MIDのEさん(文字コード45)は
Hさん(文字コード48)より小さいので、探索対象を後ろに絞ります。

USHIROにジャンプします。
GR3の1つ後ろをLeftであるGR1に設定します。

この繰り返しで、GR1のLeftがGR2のRightよりも大きくなった、
または、Hさんが見つかった時にループを抜けます。

MIDのアドレスから先頭アドレスが入っているGR4を引くと、
見つかった位置が先頭からどれだけ離れているか求まります。
GR3に「7」が求まったらそれを文字に変換して、出力します。

出力結果です。

プログラムはこちらになります。

TEST START
RPUSH


LD GR0,=’Z’ ;誰を探すか
LAD GR1,HAIRETSU
LD GR4,GR1 ;GR1の先頭アドレスを固定用にコピー
LD GR2,GR1
ADDA GR2,=9 ;配列の右端のアドレスを設定

LOOP LD GR3,GR1 ;GR3にMIDのアドレスを求める
ADDA GR3,GR2
SRL GR3,1

LD GR5,0,GR3 ;GR5にMIDの客を呼び出す
CPA GR5,GR0 ;探しているお客か?
JZE ATTA
JMI USHIRO

MAE LD GR2,GR3
LAD GR2,-1,GR2
JUMP LOOP

USHIRO LD GR1,GR3
LAD GR1,1,GR1
CPA GR1,GR2
JPL NAINAI
JUMP LOOP

ATTA ;お客が見つかった
SUBA GR3,GR4
ADDA GR3,=’0′
ST GR3,ICHI
OUT MOJI,LEN
JUMP FIN

NAINAI ;お客が見つからない
OUT MOJI2,LEN2

FIN

RPOP
RET

HAIRETSU DC ‘ABCDEFGH’
MOJI DC ‘Pos=’
ICHI DS 1
LEN DC 5
MOJI2 DC ‘MITUKARANAKATTA’
LEN2 DC 15

END

赤枠の部分を変えて、
見つからなかった場合や、探索文字をBなどの前側で
動作させてみて、無事に動きました。

探索文字をBにして、Bさんを探した結果。

この配列にないZさんを探した結果。

読んで下さってありがとうございました。

この記事を書くのに勉強になった本を紹介します。
多分この記事を読んで面白かったと思われた方は、
きっとハマると思います。

◆アルゴリズム問題がちゃんと解ける本
アルゴリズム学習の定番。
アルゴリズムが苦手で何とかしたい方におススメ

◆アルゴリズムはじめの一歩完全攻略
実際に作って学べます。
Javaを使っています。
私はJava初めてでしたが、
それでも、ハッシュ関数の所までは、
どうにかついていけました。
もっと頑張ります。

◆速習言語CASL2
CASL2、何それ、テーマパークの絶叫マシーン
みたいな名前だね、ぐらいだった私でも、入門書として楽しく読めた本です。

◆プログラミング入門CASL2
入門が卒業出来たら、ガシガシ例題解いて、
演習問題を解いて、力を付けたいという時に
読む本です。

基本情報技術者試験トップへ
アセンブラ自作サンプルへ
アセンブラ過去問プログラムへ
これからプログラミングを始める方へ

アセンブラCASL2で「線形探索」を作ってみた

基本情報技術者試験トップへ
アセンブラ自作サンプルへ
アセンブラ過去問プログラムへ
これからプログラミングを始める方へ

2020年からの基本情報技術者試験は、
言語とアルゴリズムの配点が高くなります。
なので、プログラミング未経験の事務員の私は、
非常に焦っています。

そこで、疑似言語によるアルゴリズムを
CASL2で再現してみたら、両方学べて
一石二鳥なのではと思い、今回は「線形探索」を
作ってみました。

HAIRETSUという名前の配列を作りました。
文字コードの値で大小を比較します。
Aなら41、Eなら45です。
要素0から要素5まで、Xは先頭から何番目か
(先頭を0として、どれだけ離れているか)を求めます。

この配列の先頭をGR1、おケツをGR5に設定します。

先頭からおケツまで移動するアドレスをGR2とします。
GR2は、今チェックしている配列のアドレスです。
その、今チェックしているアドレスの中身をGR3に入れます。
探す文字XをGR4に格納します。

GR2を移動していきながら、
Xと等しいか調べていきます。
GR2の中身であるGR3と、Xが入っているGR4を
比較していきます。
調べている位置のGR2がおケツのGR5より大きくなった場合と、
調べている場所の中身のGR3とXが入っているGR4が等しくなったら
ループを抜けます。

ループを抜けて、見つかった位置は、先頭からどれだけ
離れているか計算して、その距離を文字に変換して、
ICHIに格納して、「X=位置」の形で出力します。

出力結果です。

プログラミングです。

TEST START
RPUSH


LAD GR1,HAIRETSU ;先頭アドレス
LAD GR2,HAIRETSU ;配列の先頭からおケツまでの移動アドレス
LD GR5,GR1 ;配列おケツ
ADDA GR5,=5 ;おケツは先頭から「5」の距離
LD GR4,=’X’ ;GR4に探すべき値、Xを入れる

LOOP
LD GR3,0,GR2 ;比較する要素の中身
CPA GR3,GR4 ;今調べている値はXか?
JZE FIN ;等しかったらループを抜ける
LAD GR2,1,GR2 ;調べる配列を1つ先に進める
CPA GR2,GR5 ;最後までチェック済か
JPL FIN
JUMP LOOP

FIN SUBA GR2,GR1 ;見つかった位置は先頭からどれだけ離れているか
ADDA GR2,=’0′ ;距離を文字に変換
ST GR2,ICHI ;先頭からの距離をICHIに入れる
OUT MOJI,LEN

RPOP
RET

HAIRETSU DC ‘CBEAXD’
MOJI DC ‘X=’
ICHI DS 1
LEN DC 3

END

読んで下さってありがとうございました。

この記事を書くのに勉強になった本を紹介します。
多分この記事を読んで面白かったと思われた方は、
きっとハマると思います。

◆アルゴリズム問題がちゃんと解ける本
アルゴリズム学習の定番。
アルゴリズムが苦手で何とかしたい方におススメ

◆アルゴリズムはじめの一歩完全攻略
実際に作って学べます。
Javaを使っています。
私はJava初めてでしたが、
それでも、ハッシュ関数の所までは、
どうにかついていけました。
もっと頑張ります。

◆速習言語CASL2
CASL2、何それ、テーマパークの絶叫マシーン
みたいな名前だね、ぐらいだった私でも、入門書として楽しく読めた本です。

◆プログラミング入門CASL2
入門が卒業出来たら、ガシガシ例題解いて、
演習問題を解いて、力を付けたいという時に
読む本です。

基本情報技術者試験トップへ
アセンブラ自作サンプルへ
アセンブラ過去問プログラムへ
これからプログラミングを始める方へ

アセンブラCASL2で「配列の最大値と最小値」を作ってみた

基本情報技術者試験トップへ
アセンブラ自作サンプルへ
アセンブラ過去問プログラムへ
これからプログラミングを始める方へ

2020年からの基本情報技術者試験は、
言語とアルゴリズムの配点が高くなります。
なので、プログラミング未経験の事務員の私は、
非常に焦っています。

そこで、疑似言語によるアルゴリズムを
CASL2で再現してみたら、両方学べて
一石二鳥なのではと思い、今回は「配列の最大値」を
作って、一部改変して最小値も作りました。

HAIRETSUという名前の配列を作りました。
文字コードの値で大小を比較します。
Aなら41、Eなら45です。
要素0から要素4まで、
C,B,E,A,Dの順で入っています。

先頭の要素0であるCを仮の最大値として、
Cより大きかったら仮の最大値を更新して、
Cより小さかったらそのままにして、
Cと比較する要素を後ろに1つずつ移動します。

配列の先頭アドレスをGR1、
仮の最大値GR2に入れて、
GR1が指す配列の中身をGR3にします。

ループの終了条件として、
配列のおケツを超えたら終わるようにするので、
おケツの番地をGR4に入れます。

では、実行結果を見てみます。

「MAX=」
の=の後ろに最大値が出力されるようにします。
文字数は合計5文字です。

プログラムです。

TEST START
RPUSH


LAD GR1,HAIRETSU ;先頭アドレス
LD GR2,0,GR1 ;仮の最大値
LD GR4,GR1 ;配列おケツ
ADDA GR4,=4

LOOP LAD GR1,1,GR1 ;要素1番目以降に進める
CPA GR1,GR4 ;最後までチェック済か
JPL FIN
LD GR3,0,GR1 ;比較する要素の中身
CPA GR3,GR2 ;仮の最大値と要素の中身を比べている
JMI KAENAI ;仮の最大値の方が大きかったら変えないのでジャンプ
LD GR2,GR3 ;仮の最大値更新処理
KAENAI JUMP LOOP

FIN ST GR2,MAX ;仮の最大値を入れる
OUT MOJI,LEN

RPOP
RET

HAIRETSU DC ‘CBEAD’
MOJI DC ‘MAX=’
MAX DS 1
LEN DC 5

END

最後に、最大値ではなく、最小値を求めるように
改変します。

変更した所でポイントとなるのは、

赤枠の部分です。
あとは変数名とか細かい所を変えました。

最小値の実行結果です。

読んで下さってありがとうございました。

この記事を書くのに勉強になった本を紹介します。
多分この記事を読んで面白かったと思われた方は、
きっとハマると思います。

◆アルゴリズム問題がちゃんと解ける本
アルゴリズム学習の定番。
アルゴリズムが苦手で何とかしたい方におススメ

◆アルゴリズムはじめの一歩完全攻略
実際に作って学べます。
Javaを使っています。
私はJava初めてでしたが、
それでも、ハッシュ関数の所までは、
どうにかついていけました。
もっと頑張ります。

◆速習言語CASL2
CASL2、何それ、テーマパークの絶叫マシーン
みたいな名前だね、ぐらいだった私でも、入門書として楽しく読めた本です。

◆プログラミング入門CASL2
入門が卒業出来たら、ガシガシ例題解いて、
演習問題を解いて、力を付けたいという時に
読む本です。

基本情報技術者試験トップへ
アセンブラ自作サンプルへ
アセンブラ過去問プログラムへ
これからプログラミングを始める方へ

アセンブラCASL2で「うるう年の判定」を作ってみた

基本情報技術者試験トップへ
アセンブラ自作サンプルへ
アセンブラ過去問プログラムへ
これからプログラミングを始める方へ

過去問平成30年秋にうるう年を含む問題が出題されました。

2020年からの基本情報技術者試験は、
言語とアルゴリズムの配点が高くなります。
なので、プログラミング未経験の事務員の私は、
非常に焦っています。

そこで、疑似言語によるアルゴリズムを
CASL2で再現してみたら、両方学べて
一石二鳥なのではと思い、今回は「うるう年の判定」を
作ってみました。

うるう年は4で割り切れる西暦年が該当して、
割り切れなかったら違うので、早速作っていきます。

これがフローチャートです。

フローチャートのデザインが、なんだか
厨二病っぽいのは、あまり気にしないで下さい。
GR1に西暦年を設定して、
GR2は計算用にします。
4で割るのは、2ビット分右シフトします。
ここでは右論理シフトを使っています。

それで、割り切れる時はオーバーフローせず、
割り切れない時はオーバーフローをします。

西暦年2019年とした時の結果は、
「CHIGAU」と表示されます。

西暦年2020年では、「URUDOSHI」と表示されます。

ここまで、プログラムは下記になります。

TEST START

RPUSH
LAD GR1,2020 ;年を設定
LD GR2,GR1
SRL GR2,2 ;2ビットシフトで4で割る
JOV CHIGAU

OUT MOJI1,LEN1 ;うるう年の場合
JUMP FIN

CHIGAU ;違う場合
OUT MOJI2,LEN2
FIN

RPOP
RET

MOJI1 DC ‘URUDOSHI’
LEN1 DC 8
MOJI2 DC ‘CHIGAU’
LEN2 DC 6

END

では、2100年では、

うるう年と、このプログラムではなるのですが、
うるう年は、4で割り切れ、且つ、100で割り切れない年です。
なので、このようにフローチャートを改変します。

CASL2で100で割れるか調べるのは、
除算は減算で行います。
例えば、19は4で割れません。
これは人間にはすぐ分かりますが、
コンピュータでは、19-4-4-4-4=3
だから、3で余る、割り切れないと判断します。
このプログラムでは、この例では、
19-4-4-4-4-4=-1と、マイナスになったら割り切れないと
判断する処理にしました。

話をうるう年の判定の例に戻すと、
西暦2100は4で割り切れても、100で割れるので、
うるう年ではありません。
なので、2100から100ずつ引いて行って、
ゼロになったらラベルCHIGAUにジャンプさせるようにします。

結果です。

プログラミングはこちらです。
ラベルLOOP100の周辺の処理に注目して下さい。

TEST START
RPUSH


LAD GR1,2100 ;年を設定
LD GR2,GR1
SRL GR2,2 ;2ビットシフトで4で割る
JOV CHIGAU

LD GR2,GR1 ;4で割り切れた年は100で割れるか
LOOP100 SUBL GR2,=100
JZE CHIGAU
JMI URU
JUMP LOOP100

URU OUT MOJI1,LEN1 ;うるう年の場合
JUMP FIN

CHIGAU ;違う場合
OUT MOJI2,LEN2
FIN

RPOP
RET

MOJI1 DC ‘URUDOSHI’
LEN1 DC 8
MOJI2 DC ‘CHIGAU’
LEN2 DC 6

END

これで、めでたしめでたし・・・・と
行きたい所ですが、
400で割り切れる年はうるう年なんです。
例えば西暦2400年はうるう年です。

さらに改変します。
フローチャートです。

西暦2400年は、4で割り切れる→うるう年の可能性あり
100で割り切れる→400で割りきれるか調べてみよう。

という訳で、西暦2400年でトレースした結果です。

プログラムです。

TEST START
RPUSH


LAD GR1,2400 ;年を設定
LD GR2,GR1
SRL GR2,2 ;2ビットシフトで4で割る
JOV CHIGAU

LD GR2,GR1 ;4で割り切れた年は100で割れるか
LOOP100 SUBL GR2,=100
JZE CHK400 ;100で割り切れたら400で割れるかチェックへ
JMI URU
JUMP LOOP100

CHK400 LD GR2,GR1 ;400で割れるかチェック
LOOP400 SUBL GR2,=400
JZE URU
JMI CHIGAU
JUMP LOOP400
URU OUT MOJI1,LEN1 ;うるう年の場合
JUMP FIN

CHIGAU ;違う場合
OUT MOJI2,LEN2
FIN

RPOP
RET

MOJI1 DC ‘URUDOSHI’
LEN1 DC 8
MOJI2 DC ‘CHIGAU’
LEN2 DC 6

END

最後に、この最終のプログラムで、
私が生れた1977年と私が社会に出た2000年は
うるう年かどうかトレースします。

1977年の結果

2000年の結果

読んで下さってありがとうございました。

この記事を書くのに勉強になった本を紹介します。
多分この記事を読んで面白かったと思われた方は、
きっとハマると思います。

◆アルゴリズム問題がちゃんと解ける本
アルゴリズム学習の定番。
アルゴリズムが苦手で何とかしたい方におススメ

◆アルゴリズムはじめの一歩完全攻略
実際に作って学べます。
Javaを使っています。
私はJava初めてでしたが、
それでも、ハッシュ関数の所までは、
どうにかついていけました。
もっと頑張ります。

◆速習言語CASL2
CASL2、何それ、テーマパークの絶叫マシーン
みたいな名前だね、ぐらいだった私でも、入門書として楽しく読めた本です。

◆プログラミング入門CASL2
入門が卒業出来たら、ガシガシ例題解いて、
演習問題を解いて、力を付けたいという時に
読む本です。

過去問平成30年秋にうるう年を含む問題が出題されました。

基本情報技術者試験トップへ
アセンブラ自作サンプルへ
アセンブラ過去問プログラムへ
これからプログラミングを始める方へ

アセンブラCASL2でユークリッドの互除法を作ってみた。

基本情報技術者試験トップへ
アセンブラ自作サンプルへ
アセンブラ過去問プログラムへ
これからプログラミングを始める方へ

2020年からの基本情報技術者試験は、
言語とアルゴリズムの配点が高くなります。
なので、プログラミング未経験の事務員の私は、
非常に焦っています。

そこで、疑似言語によるアルゴリズムを
CASL2で再現してみたら、両方学べて
一石二鳥なのではと思い、今回は最大公約数を求める、
ユークリッドの互除法を作ってみました。

GR1に66、GR2に42を設定して、
その最大公約数が6になることをプログラミングで確認します。
大きい方から小さい方を引いて、その数を
大きい方に代入して、最終的に両方の数が一致した値が、
最大公約数になるアルゴリズムです。

66の方が42より大きいので、
66-42=24をGR1に格納します。

今度は、24と42では、
42の方が大きいので、
42-24=18をGR2に格納します。

その次に、24と18では、24の方が大きいので、
24-18=6をGR1に格納します。

6と18では、18の方が大きいので、
18-6=12をGR2に格納します。

6と12では12の方が大きいので、
12-6=6をGR2に格納します。

最後にGR1とGR2が6で等しくなったので、
ループを抜けて、これを最大公約数とします。

実行結果です。

このプログラミングです。

TEST START
RPUSH

LAD GR1,66
LAD GR2,42

LOOP CPA GR1,GR2
JZE FIN
JMI NIHE
SUBA GR1,GR2
JUMP LOOP

NIHE SUBA GR2,GR1
JUMP LOOP

FIN ADDA GR1,=’0′
ST GR1,SUU
OUT SUU,LEN

RPOP
RET

SUU DS 1
MOJI DC ‘DESU’
LEN DC 5

END

ご精読ありがとうございました。
この記事を書くのに勉強になった本を紹介します。
多分この記事を読んで面白かったと思われた方は、
きっとハマると思います。

◆アルゴリズム問題がちゃんと解ける本
アルゴリズム学習の定番。
アルゴリズムが苦手で何とかしたい方におススメ

◆アルゴリズムはじめの一歩完全攻略
実際に作って学べます。
Javaを使っています。
私はJava初めてでしたが、
それでも、ハッシュ関数の所までは、
どうにかついていけました。
もっと頑張ります。

◆速習言語CASL2
CASL2、何それ、テーマパークの絶叫マシーン
みたいな名前だね、ぐらいだった私でも、入門書として楽しく読めた本です。

◆プログラミング入門CASL2
入門が卒業出来たら、ガシガシ例題解いて、
演習問題を解いて、力を付けたいという時に
読む本です。

基本情報技術者試験トップへ
アセンブラ自作サンプルへ
アセンブラ過去問プログラムへ
これからプログラミングを始める方へ

アセンブラCASL2でバブルソートを作ってみた

基本情報技術者試験トップへ
アセンブラ自作サンプルへ
アセンブラ過去問プログラムへ
これからプログラミングを始める方へ

シミュレーターと過去問を解くまでの勉強に使った参考書はこちらです
平成26年秋の過去問にバブルソートが出題されました。

2020年からの基本情報技術者試験は、
言語とアルゴリズムの配点が高くなります。
なので、プログラミング未経験の事務員の私は、
非常に焦っています。

そこで、疑似言語によるアルゴリズムを
CASL2で再現してみたら、両方学べて
一石二鳥なのではと思い、今回はバブルソートを
作ってみました。

配列BUBに「CBEAD」という文字が入っています。
これを「ABCDE」と並び替えます。
CASL2ではAは41、Bは42…という文字コードが割り当てられていて、
その大小で比較します。

バブルソートは、簡単に言うと、
「おケツから頭に向かって、お隣さん同士、どっちが大きいかを
比較するアルゴリズム」です。

まず、この図ですと、
AとDはDの方が大きいから、このまま。

EとAは、Eの方が大きいから交換

BとAはBの方が大きいから交換

CとAはCの方が大きいから交換

これで、先頭のAの場所が決定しました。

もう一度、配列のおケツから同じように
交換して、今度はBを確定していきます。
この時の頭をGR1、おケツから交換するアドレスをGR2

おケツと比較する位置をGR3、
GR2の値をGR4、GR3の値をGR5
値交換に使う作業領域をGR6(TEMPなどと呼ばれる)にします。

外ループでGR1である頭からの位置、
内ループでおケツから交換していくGR2が変わっていきます。

内ループはGR2がGR1より小さくなったら抜けて、
外ループはGR1が最後尾まで行ったら抜けます。
配列の最後尾の位置をGR7とします。

実行して見ます。

「CBEAD」と入力します。

並び替え前の配列が出力されます。

並び替え後の配列が出力されます。

以下プログラムになります。

TEST START
RPUSH


IN BUB,LEN
OUT BUB,LEN

LAD GR7,BUB
ADDA GR7,=4
LAD GR1,BUB

LOOP1
LAD GR2,BUB
ADDA GR2,=4

LOOP2 LD GR3,GR2
SUBA GR3,=1
LD GR4,0,GR2
LD GR5,0,GR3
CPA GR4,GR5
JMI KOUKAN
JUMP SHORI

KOUKAN LD GR6,GR4
LD GR4,GR5
LD GR5,GR6
ST GR4,0,GR2
ST GR5,0,GR3

SHORI LAD GR2,-1,GR2
CPA GR2,GR1
JPL LOOP2

LAD GR1,1,GR1
CPA GR1,GR7
JMI LOOP1

OUT BUB,LEN
RPOP
RET
BUB DS 5
LEN DC 5
END

ご精読ありがとうございました。
この記事を書くのに勉強になった本を紹介します。
多分この記事を読んで面白かったと思われた方は、
きっとハマると思います。

◆アルゴリズム問題がちゃんと解ける本
アルゴリズム学習の定番。
アルゴリズムが苦手で何とかしたい方におススメ

◆アルゴリズムはじめの一歩完全攻略
実際に作って学べます。
Javaを使っています。
私はJava初めてでしたが、
それでも、ハッシュ関数の所までは、
どうにかついていけました。
もっと頑張ります。

◆速習言語CASL2
CASL2、何それ、テーマパークの絶叫マシーン
みたいな名前だね、ぐらいだった私でも、入門書として楽しく読めた本です。

◆プログラミング入門CASL2
入門が卒業出来たら、ガシガシ例題解いて、
演習問題を解いて、力を付けたいという時に
読む本です。

シミュレーターと過去問を解くまでの勉強に使った参考書はこちらです
平成26年秋の過去問にバブルソートが出題されました。

基本情報技術者試験トップへ
アセンブラ自作サンプルへ
アセンブラ過去問プログラムへ
これからプログラミングを始める方へ