アセンブラCASL2でクール、クーラー、クーリッシュな暗号

この記事では、アセンブラ言語の「配列や文字列の扱い」について簡単な例題で学べます。配列の添字と文字を対応づけている、簡易的な暗号文です。

<<関連記事>>

基本情報技術者試験トップへ
アセンブラ自作サンプルへ
アセンブラ過去問プログラムへ
令和2年(令和3年1月)合格報告

少し前に竹内涼真さんが出演されているアイスのCMを
見ました。
「クール、クーラー、クーリッシュ」っていうアレです。
TVのCMは、聴いているうちに、耳に残る上、
あのアイスの広告が、通勤電車にもあったので、
時々、「クール、クーラー、クーリッシュ」と、
独り言を言ってしまいます。

そこで、アイスをCOMET2のアセンブラ、CASL2で作ろうと思いました。
この様な配列があります。

0番目はA、1番目はB、2番目はC…という風に
暗号を解読するような感じで、数値を文字に当てはめていきます。
例えば、ICEの「I」は8、「C」は2、「E」は4になります。

なので、最初は「8」を入力します。

すると、「8」は文字コードで「38」なので、
レジスタに38と入ります。

GR2に38と入りました。
これを8にする為には、
文字コード30の「0」を使って減算します。

GR2が8になりました。

今度はこの8をアイスの「I」に変換します。
配列MOJIの先頭アドレスをGR3に入れます。

GR3には配列MOJIの先頭アドレスが
ここでは1045と入りました。

このアドレスを8加算(先頭アドレスから8だけ右に移動)すると、
「I」のアドレスになります。

アドレス1045に8を加えて104Dになりました。

レジスタGR4にIを納めます。
Iの文字コードは49です。

この「I」を、出力用の配列DASUの先頭アドレスに格納します。

格納済み文字数をGR1に設定します。

この文字数が3になったらループを抜けて出力します。

同様に、ICEの残りの文字「C」は2、「E」は、4を入力して、
格納します。

出力結果です。
暗号文みたいなプログラムを作ってみたいのと、
「クール、クーラー、クーリッシュ」がループしていたので、
これを作ってみました。

全然汎用性がないのですが、
アイスの売り上げに貢献出来るかも??

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

TEST START
RPUSH


LAD GR1,0 ;出力用配列に格納する場所と格納文字数

LOOP IN KEY,LEN ;文字に変換する数字入力用
LD GR2,KEY
SUBA GR2,=’0′ ;文字から数値に変換
LAD GR3,MOJI
ADDA GR3,GR2 ;変換した数値分右に移動
LD GR4,0,GR3
ST GR4,DASU,GR1
LAD GR1,1,GR1
CPA GR1,=3
JZE FIN
JUMP LOOP

FIN
OUT DASU,LEN2

RPOP
RET

KEY DS 1
LEN DC 1
MOJI DC ‘ABCDEFGHIJ’
DASU DS 3
LEN2 DC 3

END

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

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

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

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

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

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

<<関連記事>>

基本情報技術者試験トップへ
アセンブラ自作サンプルへ
アセンブラ過去問プログラムへ
令和2年(令和3年1月)合格報告

【OFFSET関数、INDEX関数・MATCH関数のネスト】で「ドラゴンボール」と「迷子のトランクス」を探せ!!

小学生の頃、ドラゴンボールのキャラの悟空になりきっていました(笑)

この記事ではドラゴンボールを題材に、

・OFFSET関数でドラゴンボールを見つける

・INDEX関数とMATCH関数で、ベジータとブルマの子どもで「迷子になったトランクス」を見つける


・関数のネストに自然に慣れる

についての概要を掴めます。

ご存知かと思いますが、「ドラゴンボール」について簡単に書きますと、ボールを7個集めると願いが叶うという格闘少年漫画です。

オレンジ色のボールに、★が1つから7つまで入ったボールがあり、それらをコンプリートすると、願いが叶います。

それではまず、OFFSET関数から見て行きます。



下の様な簡単なシートを用意します。

表の作り方の基本的なことですが、A列縦の1〜2まで入力して、そこを選択して下にフィルをすると1ずつの連番が振れます。

また、横の数字はA列縦の1〜4まで選択してコピーをして、貼り付け先のセルB1を選択して、[Ctrl]+[Alt]+[V]を押して、下部の「行/列の入れ替え」にチェックを入れてOKを押します。

表が整いましたら、まず基準は、表の左上隅にある、赤い色で塗りつぶしたセルA1の「おうち」に致します。

その「おうち」を基準にして、黄色いセルG1の所に、オレンジのセルE4の「ドラゴンボール★」を呼び出します。

では早速、セルG1にOFFSET関数を入力します。
最初に数式の意味をお伝えしますと、

=OFFSET(おうち , 3行下 , 4列右)

という意味の式を入力します。

おうちのあるセルA1を基準にして、下へ3歩右へ4歩移動しました。
では、実際に式を入れていきます。
(引数の指定は、下に下がる方を先に書きます。)

=OFFSET(A1,3,4)

すると、セルG1にドラゴンボール★が呼び出されました。


次に、同じセルG1に「ドラゴンボール★★★」を呼び出しますので、式を書き換えます。[F2]を押します。(お使いのノートPCによっては、[Fn]+[F2]キー)
今度は、「おうち」から10歩下に行って1歩右に行きますので、

=OFFSET(A1,10,1)

と指定します。

OFFSET関数はここまでです。
基準のセルA1のお家は「0(ゼロ)」としています。

次に掲載するINDEX関数と混同しない為に、「OFFSET」の「O(オー)」は「0(ゼロっぽい)」と抑えると分かりやすくなると思います。


では次に、INDEX関数の基本的な使い方を見てみます。
この様な表を用意します。

先ほどのシートをコピーしてA列と1行目を挿入します。
B列のセルの1〜7までを選択してコピーし、セルA2の所で、[Ctrl]+[Alt]+[V]→[V]で書式なしの番号のみが貼り付けられます。

同様にして、1行目も番号を振ります。
A列の1〜5までをコピーして、セルB1の所で[Ctrl]+[Alt]+[V]→ 「(下の方にある)行列の入れ替えのチェックボックスを入れてOK」で番号が貼り付けられました。

内容を下記の様にキャラクターを入れて書き換えます。

ベジータとブルマの間には、トランクスという子どもがいます。
迷子になったトランクスを探します。

上の表から、「ベジータがいる行」と、「ブルマがいる列」を目視すると、「ベジータは5行目」「ブルマは4列目」になり、そこで迷子のトランクスが泣いています。

また、INDEX関数や、この後にお伝えするMATCH関数を理解する時にイメージとして

「縦の糸はあなた」「横の糸は私」

・・・みたいな関数だと解釈すると親しみやすいと思いました(笑)
フィーリングはどんな勉強においても結構大事かもしれないです。

ここでオレンジのセルB17にINDEX関数を使って、ベジータとブルマの子どもで、迷子になってしまった「トランクス」を見つけます。

セルB17に

=INDEX(「おうち」を含めた表の範囲,
ベジータの行の5, ブルマの列の4)

である、

=INDEX(B2:F8,5,4)

と入力すると、無事に迷子になったトランクスが無事に見つかりました!!

めでたし、めでたし!!


さて、上記の方法でも迷子のトランクスを見つけ出せましたが、実務では表の増減などの影響もあり、ベジータの行を5、ブルマの列を4といったベタ打ちは殆ど使わないのです。

GPSを使わないでヤマカンで見つけた様なものですから。

そこでGPS的な役割として、MATCH関数を用いて、それぞれベジータの行とブルマの列を求めます。

最初にベジータの行を求めます。「ベジータ」と書かれているすぐ下の黄色いセルB11に、

=MATCH
(ベジータ,「おうち」を含めた「行」のキャラ名の範囲,完全一致)

という意味の、

=MATCH(B10,B2:B8,0)

と入力します。

この式の意味は、B10の「ベジータ」を検索値として、
「おうち」を含めた行の部分の、B2からB8のキャラクター名の範囲を調べ、
5番目であることの結果が返って来ました。
最後の0は、ピッタリ一致する、完全一致という意味です。


この式の最後の「0」の他に、近似一致と言ってこの部分を「1」にすると最も近い値を求めることも出来ますが、今回は「ベジータ」がいる行を求めたいので、ピッタリ一致する「0」を指定しました。

次にブルマの列を調べます。
ブルマの下のセルB14に式を入れます。

=MATCH
(ブルマ,「おうち」を含めた列」のキャラ名の範囲,完全一致)

という意味である、

=MATCH(B13,B2:F2,0)

と式を入れました。


この表から一旦セルB17に入った式を削除して、現在下の様にして、セルB17に迷子になったトランクスを探します。

オレンジのセルに、

=INDEX
( おうちを含む表の全て , ベジータ行 , ブルマ列 )

を意味する、

=INDEX(B2:F8,B11,B14)

を入れると、おうちから数えて5行目下、4列目右に行った所のセルの「トランクス」が求まります。

また、ベジータとブルマのセルを参照しない方法で、関数のネストを使って、INDEX関数の中にMATCH関数を用いることでも同様に求まります。

一度、オレンジのセルのB17を消して、

=INDEX(おうちを含む表の全て,
MATCH(ベジータ,行範囲,0),
MATCH(ブルマ,列範囲,0)
)

と、関数のネストを使用した数式に入れると、おうちを含む表の全ての所に、B2〜F8が入り、
「ベジータ行」の所にMATCH関数で求めた5行目
「ブルマ列」の所にMATCH関数で求めた4列目が入りました。

=INDEX(B2:F8,MATCH(B10,B2:B8,0),MATCH(B13,B2:F2,0))

トランクスも見つかって、一安心。

この記事で紹介した、OFFSET関数、INDEX関数とMATCH関数の合わせ技を使いこなせる様になると、VLOOKUP関数の限界を突破して、Excelでの表現力が増しますね(=^x^=)!

お疲れ様でした。ブレイクタイムPhotoは、

スカイツリーと河津桜です。
河津桜はソメイヨシノよりも少々早咲きです。


ご精読誠にありがとうございました。

「できるYouTuber式 Excel現場の教科書(長内孝平氏)」

単行本(ソフトカバー)
Kindle版


「なんの才能もない発達障害者の声: 〜 届かない声を届けたい 〜 (障害者雇用向け)」

私、猫★シエスタの著作です。殆どが「発達障害者として働くことや障害とSNSについて」ですが、障害者雇用の事務作業で特に使用頻度の高いキーに絞ったExcelなどのショートカットキーの紹介と、演習問題も掲載しております。
Kindle版

「取りあえず事務職で働きたいから手っ取り早くExcel教えてくれ」に戻る

初めてのGoogleスプレッドシートへ



写真クリエイターとしての活動
自己紹介

Javaで好きな人からヴァレンタインのチョコレートがもらえる??

この記事を書いているのは、梅雨明け前、
暑さについては夏真っ盛りです。

ヴァレンタインって、季節外れも良い所なのですが、
Javaで2次元配列の勉強を始めたてなので、
予習復習兼ねてドット絵でハート型のチョコをイメージした、
プログラムを作ってみました。

配列heartに、0,1…で指定した値を用意して、
0だったら「空白文字」、1だったら「◆」を使って、
ドット絵を作ってみました。

どうせ勉強するなら、楽しい方が良い。
好きは女の子からバレンタインでチョコレートを貰える
場面を妄想しています。

それでは実行して見ます。

名前を「猫」と入力します。

大好きな人のお名前に推しの名前を入力します。

それで、エンターを押すと、
チョコが届きました!!!

他のファンの方に怒られるかな??
プログラムはこちらになります。

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

int i,j;
String yourname,lover;

System.out.println(“あなたのお名前—>”);
Scanner scn= new Scanner(System.in);
yourname=scn.next();

System.out.println(“大好きな人のお名前—>”);
lover=scn.next();

System.out.println(yourname+”さんへ”);
System.out.println(“Happy Valentine!!”);
int[][] heart ={{0,0,1,1,0,0,0,1,1,0,0},
{0,1,1,0,1,0,1,0,1,1,0},
{1,1,0,0,0,1,0,0,0,1,1},
{1,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,1},
{0,1,0,0,0,0,0,0,0,1,0},
{0,0,1,0,0,0,0,0,1,0,0},
{0,0,0,1,0,0,0,1,0,0,0},
{0,0,0,0,1,0,1,0,0,0,0},
{0,0,0,0,0,1,0,0,0,0,0}};
for(i=0;i<11;i++){
for(j=0;j<11;j++){
if(heart[i][j]==1){
System.out.print(“◆”);
}
else{
System.out.print(“ ”);
}
}
System.out.println(“”);
}

System.out.println(lover+”より、愛を込めて”);
}
}

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

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

Javaで花文字を作って回転させてみた

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

基本情報技術者試験では、花文字を使った問題が
出題されました。

平成27年度秋 問6

*で作った文字を回転させる問題です。
この問題の考え方を使って、
90度、180度、270度に回転させるプログラミングを
Javaで作ってみました。

基本の形が「↑」で、それを90度回転で「→」、
180度回転で「↓」、270度回転で「←」と表示します。

5マス×5マスのドットをキャンパスにして、
それぞれの座標をi,jで表して、
配列の要素の値を0と1で表し、
「1」だったら「@」で、「0」だったら「空白」を使って、
ドット絵にしています。

こちらがフローチャートです。

では、プログラムを実行して見ます。
まず、基本の矢印が出て来ます。

90度回転させます。
回転前と、回転後の座標の関係は、
[i][j]が、[4-j][i]になります。

180度回転させます。
回転前と、回転後の座標の関係は、
[i][j]が、[4-i][j]になります。

270度回転させます。
回転前と、回転後の座標の関係は、
[i][j]が、[j][i]になります。

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

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

int i,j,angle;
int[][] flower={{0,0,1,0,0},
{0,1,1,1,0},
{1,0,1,0,1},
{0,0,1,0,0},
{0,0,1,0,0}};

//初期状態の花文字
for(i=0;i<5;i++){ for(j=0;j<5;j++){ if(flower[i][j]==1){ System.out.print(“@”); } else{ System.out.print(“ ”); } } System.out.println(“”); } //回転する角度を選ぶ System.out.println(“何度回転させますか?—–> 0:90度,1:180度,2:270度”);
Scanner scn= new Scanner(System.in);
angle=scn.nextInt();

//90度回転
if(angle==0){
System.out.println(“90度回転しました”);
for(i=0;i<5;i++){
for(j=0;j<5;j++){
if(flower[4-j][i]==1){
System.out.print(“@”);
}
else{
System.out.print(“ ”);
}
}
System.out.println(“”);
}
}

//180度回転
if(angle==1){
System.out.println(“180度回転しました”);
for(i=0;i<5;i++){
for(j=0;j<5;j++){
if(flower[4-i][j]==1){
System.out.print(“@”);
}
else{
System.out.print(“ ”);
}
}
System.out.println(“”);
}
}

//270度回転
if(angle==2){
System.out.println(“270度回転しました”);
for(i=0;i<5;i++){
for(j=0;j<5;j++){
if(flower[j][i]==1){
System.out.print(“@”);
}
else{
System.out.print(“ ”);
}
}
System.out.println(“”);
}
}
}
}

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

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

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

【オートコンプリート機能をOFF】Excelの入力候補を表示させない

この記事では、

入力の時に時々不便に感じる【オートコンプリート】の設定をOFF

Window / Mac の場合の設定方法

についての概要が掴めます。


例えば、「新大久保」と入力した後に、
新宿」と入力したいとします。
しかし・・・

この機能、オートコンプリートは便利な時もありますが、状況によっては不便なこともございませんか?

私は「新宿」って入力したかったのです。
そこで、このオートコンプリート機能を使わないように
設定します。

WindowsとMacで操作方法が異なるので、両方書かせて頂きます。


●【Windows】の場合
「ファイル」タブ
から「オプション」を選んでください。
すると、こういうのが出てきたので、

「詳細設定」を選びます。

その後、「編集オプション」から、「オートコンプリート」の
チェックを外します。

これで、煩わしい機能が解除されました。
(必要に応じて戻しておいて下さい。)


●【Mac】の場合
macの場合は先のWindowsとは、手順が少し異なります。

りんごマークと、ファイルの間の「Excel」をクリックします。

更に、「環境設定」をクリック

次に、オートコンプリートをクリック

ここのチェックを外します。

あとは左上の赤い所で閉じます。
(必要に応じて戻しておいて下さい。)


お疲れ様でした。ブレイクタイムPhotoは、

新宿中央公園の噴水と花です。

ご精読誠にありがとうございました。

「できるYouTuber式 Excel現場の教科書(長内孝平氏)」

単行本(ソフトカバー)
Kindle版


「なんの才能もない発達障害者の声: 〜 届かない声を届けたい 〜 (障害者雇用向け)」

私、猫★シエスタの著作です。殆どが「発達障害者として働くことや障害とSNSについて」ですが、障害者雇用の事務作業で特に使用頻度の高いキーに絞ったExcelなどのショートカットキーの紹介と、演習問題も掲載しております。
Kindle版

「取りあえず事務職で働きたいから手っ取り早くExcel教えてくれ」に戻る

初めてのGoogleスプレッドシートへ



写真クリエイターとしての活動
自己紹介

Javaで「便所じゃんけんゲーム」を作ってみた

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

プログラミングの基本のひとつである、
じゃんけんゲームを作りました。

私が子どもの頃、
「グリンピース」というじゃんけんが合って、
グーが「グリン」、チョキが「チョリン」、パーが「パリン」という
ものや、戦争では「軍艦、朝鮮、ハワイ」というじゃんけんも
ありました。

今日、この記事で取り上げるじゃんけんは、
「便所」です。

グーが「0:うんこ」、チョキが「1:ちょん切れた」、
パーが「2:パンツ」です。

配列「benjyo」を作り、対応する添え字の所に格納しています。

人間の出す手は、「0、1、2」から選び、
コンピュータの出す手は、乱数を発生させます。

乱数は0~1までの範囲でランダムに発生させます。
その乱数に配列数をかけて整数型にして、
配列benjyoの添え字にしています。

人間の手をyourhand、コンピュータの手をcomhandとして、
両者が等しければ「引き分け」です。

例えば、人間が0(うんこ)でコンピュータが1(ちょん切れた)
でしたら、人間<コンピュータで、人間の勝ちです。
小さい方が勝ちになります。

ところが、人間が0(うんこ)でコンピュータが2(パンツ)の
時は、人間<コンピュータですが、人間が負けになります。

その為、うんことパンツの組み合わせの時は、
別途条件を設けました。

そのフローチャートです。

では、実行して見ます。

出す手を聞かれたので、パンツの「2」を選びます。
コンピュータは「うんこ」でしたので、人間の勝ちです。

次に、ちょん切れたの「1」を選びます。
コンピュータは「パンツ」なので、勝ちました。

じゃんけん強いな!!
それは良いのですが、一応勝ち、負け、引き分けの
三パターン出したいです。

次は「0」のうんこを出して見ます。
引き分けでした。

最後に再び「1」のちょん切れたを出します。

負けちゃいました。

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

import java.util.Scanner;
public class benjyojanken{
public static void main(String[] args){
//配列benjyoを定義する。
String[] benjyo={“うんこ”,”ちょん切れた”,”パンツ”};
int yourhand,comhand;
//あなたの出す手
System.out.println(“あなたの出す手は?—–> 0:うんこ,1:チョン切れた,2:パンツ”);
Scanner scn= new Scanner(System.in);
yourhand=scn.nextInt();
System.out.println(“あなたは「”+benjyo[yourhand]+”」を出しました。”);
//コンピュータの出す手
int num =benjyo.length;
double rand=Math.random()*num;
comhand=(int)rand;
System.out.println(“コンピュータは「”+benjyo[comhand]+”」を出しました。”);
//勝敗ジャッジ!!
if(yourhand==comhand){
System.out.println(“ひきわけ”);
}
else{
if(yourhand==2&&comhand==0){
System.out.println(“WIN(^-)-☆”); } else if(yourhand==0&&comhand==2){ System.out.println(“LOSE( ;∀;)”); } else{ if(comhand>yourhand){ System.out.println(“WIN(^-)-☆”);
}
else{
System.out.println(“LOSE( ;∀;)”);
}
}
}
}
}

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

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

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

【Excelテーブルとスライサー】ショートカットキーや選択で東京観光

この記事を読むことで、Excelで東京都のオススメ観光スポットを例に、

テーブルの作り方
(フィルタ機能・自動拡張の機能付き)

テーブル作成の便利なショートカットキー

スライサーの使い方

不要なスライサーの列の非表示

についての概要をつかめます。

この様な、少し地味な表を用意しました。

これを管理・操作しやすくする為に、テーブルに変換します。

表内のデータがある所でしたらどこでも良いので、任意のセルを選択して、

[ Ctrl ] + [ T ]

を押します。


先頭行をタイトルにするので、チェックを入れて、[Enter]を押します。

この様になりました。
色の好みもありますので、デザインは「テーブルデザイン」の「デザイン」の、
テーブルスタイルかお好みのデザインを選びます。

デーブルスタイルの右下の赤丸の所をクリックすると、色々なタイプのデザインが選べる様になります。
勿論、デザインを適用しないで、左上の「なし」にして、
好きな色を付けることも可能です。

テーブルを使うことのメリットは、フィルター機能が付いてることと、データをドンドン追加するにつれ、テーブルの範囲が自動で拡張出来ることです。
また、データを入力する時に表の範囲の中のみを移動するので、入力が容易になります。


テーブルには、データを絞り込む時に視覚的に分かりやすい、
スライサーを組み合わせることも可能です。
デザインタブをクリックして、スライサーの挿入を選びます。

チェックを入れて、Enterを押すと、
フィールド(列ごと)のスライサーが挿入されます。
「オススメスポット」と「エリア」の両方にチェックを入れてスライサーを作成しました。

好きな場所に移動します。
これも色などのデザインを選べます。

エリアから、例えば「下町」を選びます。

行が絞られましたね。
下町のスポットが強調されます。

ただ、薄くですが、それ以外のスポットも
表示されてしまっているので、
それを非表示にさせたいと思います。

おススメスポットのスライサーを選択して、
スライサーツールの「オプション」を選びます。

スライサーの表示設定を選びます。

ここの、チェックを入れて、Enterを押します。

すると、ここの所が非表示になって、
下町エリアだけが表示されました。


ここの手順、Macの場合は、こちらをご参照下さい。


お疲れ様でした。ブレイクタイムPhotoは、

よみうりランドのクリスマスイルミネーションの噴水です。

ご精読誠にありがとうございました。

「できるYouTuber式 Excel現場の教科書(長内孝平氏)」

単行本(ソフトカバー)
Kindle版


「なんの才能もない発達障害者の声: 〜 届かない声を届けたい 〜 (障害者雇用向け)」

私、猫★シエスタの著作です。殆どが「発達障害者として働くことや障害とSNSについて」ですが、障害者雇用の事務作業で特に使用頻度の高いキーに絞ったExcelなどのショートカットキーの紹介と、演習問題も掲載しております。
Kindle版

最後までお付き合い頂き、誠にありがとうございました!!

「取りあえず事務職で働きたいから手っ取り早くExcel教えてくれ」に戻る

初めてのGoogleスプレッドシートへ



写真クリエイターとしての活動
自己紹介

基本情報技術者試験の学習スケジュールを立てた。

この記事では、基本情報技術者試験の学習モチベーションを高め、維持するのに欠かせない、スケジュールを掲載します。また、アルゴリズムと言語(アセンブラ)の参考書の紹介もしています。

基本情報技術者試験トップへ
令和2年度(令和3年1月)合格報告
これからプログラミングをはじめる方へ
飲み込みの遅い私がアルゴリズムを攻略するまで

延期の為、スケジュールを立てなおしました。
アセンブラをガッツリやりたいと思います。

アルゴリズムとCASL2の使用テキストです。
あと、受験ナビさんから情報を得ています。

基本情報技術者試験トップへ
令和2年度(令和3年1月)合格報告
これからプログラミングをはじめる方へ
飲み込みの遅い私がアルゴリズムを攻略するまで

アセンブラCASL2で「再帰呼び出し」を作ってみた

この記事ではアセンブラで、簡単な足し算を使った再帰呼び出しを学習します。
再帰呼び出しは基本情報技術者試験で午前午後問わず出題させる可能性が高いです。

<<関連記事>>

基本情報技術者試験トップへ
アセンブラ自作サンプルへ
アセンブラ過去問プログラムへ
令和2年(令和3年1月)合格報告

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

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

再帰呼び出しって、RPGで言うとダンジョンの中の迷路に迷って、
HPが0になったらゲームオーバーして魂が抜ける
みたいなイメージがあるのですが、皆さまどうですか??

HPをNとして、N=5(って、よわよわじゃん)だったら、
魂が抜ける前に5を宝箱に移動して、
魂が4になって、それを宝箱に入れて宝箱が
5+4=9になって、また魂が1つ減って3になって、
それを宝箱に入れて箱が5+4+3=12になって、
また魂が1つ減って2になって、宝箱に入れて、
箱が5+4+3+2=14になって、魂が1になって、
箱が5+4+3+2+1=15になって、魂が0になったら
ゲームオーバーで、身体は迷路の中、魂は天国に行って、
お姫様と幸せに暮らしましたとさ、って感じで、
F(N)=N+F(N-1)
の再帰呼び出しを行います。

全然ハッピーエンドじゃないのかな。
でも、天国で幸せならいいか。
話を再帰呼び出しに戻します。

N=5の時は、
F(5)=5+4+3+2+1=15
になり、16進数表記では「F」になります。
そのプログラムを作りました。

フローチャートです。


以下、トレースを行います。

レジスタは、
Nの値をGR1、F(5)を計算する合計をGR2、
出力ウィンドウに表示する文字コード用にGR3を使います。

GR1に「5」、GR2とGR3に「0」を設定します。

文字コード出力用にGR1の値をGR3にコピーします。

+30して文字コードにしました。
(この処理の説明は以下略します。)

「5+」
と表示されました。

GR2にGR1の値を加算します。

GR1の値を1つ減らして「4」にします。

GR1>0なので、
サブルーチン、SAIKIの中で再帰呼び出しを行います。

「4+」
と表示されました。

GR2の値が5から+4されて、9になりました。

GR1の値を1つ減らして「3」にします。

GR1>0なので、
サブルーチン、SAIKIの中で再帰呼び出しを行います。

「3+」と表示されました。

GR2の値が9から+3されて12になりました。
16進数では12は「C」です。

GR1の値を1つ減らして「2」にします。

GR1>0なので、
サブルーチン、SAIKIの中で再帰呼び出しを行います。

「2+」と表示されました。

GR2の値はC(12)から+2されてE(14)になりました。

GR1の値を1つ減らして「1」にします。

GR1>0なので、
サブルーチン、SAIKIの中で再帰呼び出しを行います。

「1+」と表示されました。

GR2の値はE(14)から+1されてF(15)になりました。

GR1の値を1つ減らして「0」にします。

GR1>0が偽になったので、
サブルーチン、SAIKIを抜けます。

メインに戻って、
「GR1=0になったので 抜けます にゃ!!」
と表示してプログラムを終了します。

プログラムはこちらです。

MAIN START
RPUSH


LAD GR1,5
LAD GR2,0
LAD GR3,0

CALL SAIKI
OUT MOJI,LEN0
RPOP
RET

MOJI DC ‘GR1=0 NI NATTANODE NUKEMASU NYA!!’
LEN0 DC 33

SAIKI
LD GR3,GR1
ADDA GR3,=’0′
ST GR3,KAZU
OUT KAZU,LEN
ADDA GR2,GR1
SUBA GR1,=1
CPA GR1,=0
JZE FIN

CALL SAIKI

FIN
ADDA GR2,GR1

RET

KAZU DS 1
TASU DC ‘+’
LEN DC 2
END

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

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

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

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

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

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

<<関連記事>>

基本情報技術者試験トップへ
アセンブラ自作サンプルへ
アセンブラ過去問プログラムへ
令和2年(令和3年1月)合格報告

アセンブラCASL2で「2進数の乗算」を作ってみた

この記事では、駄菓子屋でチョコレートを買う例題を通して、「足し算とシフト」での掛け算が学べます。アセンブラの定番中の定番!!
基本情報技術者試験で頻出なので、実際の過去問のリンクも貼りました。
 平成29春アセンブラ過去問

<<関連記事>>

基本情報技術者試験トップへ
アセンブラ自作サンプルへ
アセンブラ過去問プログラムへ
令和2年(令和3年1月)合格報告

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

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

勉強するとお腹減って、甘いものが食べたくなることもあります。
私はチョコレートが好きで、特に期間限定で、
夏だったら「塩」とか「ミント」とか入っているチョコ、
冬だったらくちどけが粉雪みたいな感じの、
ふわふわした食感のチョコが好きです。

はい、そうです、デブです。

で、2進数の乗算でイメージするチョコレートですが、
上記のようなお高いチョコは、計算が複雑になるので、
駄菓子屋で売っている5円チョコをイメージします。

5円チョコを9個買うとします。
45円ですね。
それをCASL2の2進数の乗算で計算してみたいと思います。

GR1に5円チョコの「5」・・・かけられる数「0101」
GR2に9個の「9」・・・かける数「1001」
GR3に合計0円として、0で初期化します。

フローチャートはこんな感じです。


2進数の掛け算では、かける数(9個)の、
最後のビットが「1」だったら、合計のGR3にかけられる数(5円)を足します。
最後のビットが「0」だったら、合計のGR3は、何もしません。
その後、GR1を左シフトして、GR2を右シフトします。
これを、GR2が0になるまで繰り返します。

GR2は、
・下1桁が1かの確認
・GR1の左1ビットシフトのあとにGR2を右1ビットシフト

と、右1ビットシフトを2回もして、値が変わってしまうので、
スタックにPUSHで積んどきます。
それで、GR1、GR2、それぞれシフトする前にPOPでGR2へと値を取り出します。
では、トレースして見ます。

シミュレーターのレジスタの表示と、
スタックの表示をを2進数に切り替えます。

これはレジスタで、スタックも同じようにして切り替えます。

実行すると、まず、
GR1~GR3まで値が入りました。
GR1は5…「0101」
GR2は9…「1001」
GR3は0…「0000」
です。

GR2の最後のビットが0か1かを調べるのに、
1ビット右にシフトして、1が落っこちる、つまり、
オーバーフローするかどうかを調べます。
まず、一旦GR2の値をスタックに積みます。

右にシフトすると、OFフラグ赤くなっているので、
オーバーフローしています。
つまり、最後のビットが「1」でした。

GR3にGR1の値を加えます。
GR3は「0101」になりました。

スタックからGR2へ、POPで値を戻しました。

GR1を1ビット左へシフトします。

GR2を1ビット右へシフトします。

ループの先頭に戻ります。
また、GR2を一旦スタックへ退避させます。

GR2を右シフトしたら、OFが赤くなっていないので、
オーバーフローしていません。
最後のビットが0でした。

スタックからPOPして、値をGR2に戻します。

GR1を1ビット左へシフトしました。

GR2を1ビット右へシフトしました。

ループの先頭に戻ります。
また、一旦GR2をスタックへ積みました。

GR2の値を右に1ビットシフトしたら、
OFが赤くなっていないので、オーバーフローしていない、
つまり最後のビットが「0」でした。

スタックからGR2へPOPで戻します。

GR1を左へ1ビットシフトします。

GR2を右へ1ビットシフトします。

ループの先頭に戻ります。
また、GR2をスタックに退避させます。

GR2を右シフトして、最後のビットを調べると、
OFが赤くなっているので、最後のビットは「1」でした。

なので、GR1の値をGR3に足します。
この値が、101101で、2の5乗の【32】と、
2の3乗の【8】と、2の2乗の【4】と、2の0乗の【1】を足した、
45で、5円×9個=合計45円となります。

スタックからPOPで値をGR2へ戻します。

GR1を左へ1ビットシフトします。

GR2を右へ1ビットシフトします。

ループの先頭に戻ります。
GR2が0(ZFが赤い)となり、繰返しの条件が偽になるので、
ループを抜けます。

はい、駄菓子屋で、無事に5円チョコを9個買えました。
いっただっきまーす!!

だから太るんです( ;∀;)
基本情報技術者試験受かったらダイエットしようかな。
って、2018年に簿記3級受かったら、2019年に2級受かったら…って
言っていて、全然痩せる気無いかもです。

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

TEST START
RPUSH


LAD GR1,5
LAD GR2,9
LAD GR3,0

LOOP CPA GR2,=0
JZE FIN
PUSH 0,GR2
SRL GR2,1
JOV TASU
JUMP IDOU
TASU ADDL GR3,GR1
IDOU
POP GR2
SLL GR1,1
SRL GR2,1
JUMP LOOP

FIN

RPOP
RET
END

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

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

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

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

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

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

<<関連記事>>

基本情報技術者試験トップへ
アセンブラ自作サンプルへ
アセンブラ過去問プログラムへ
令和2年(令和3年1月)合格報告

モバイルバージョンを終了