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

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

Excelでデータの入力をしていて、
「こらーーーーー!! うざいんじゃ!!!」
と思う機能はございませんか?

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

この機能、オートコンプリートって言うんですけど、
うざくないですか。
私は「新宿」って入力したかったんですよ。
はい、都庁がある所です。

このオートコンプリート機能を使わないように
設定します。

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

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

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

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

これで、煩わしい機能が解除されました。

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

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

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

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

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

あとは赤い所で閉じます。

私もWindowsからMacに買い換えて、2年が経とうとするのに、いまだに不慣れな所があったりします・・・。

お疲れ様でした。
ここで一旦、写真で休憩を挟みます。

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




Excelもスプレッドシートも、学ぶ範囲が広すぎたり、自分が頑張って勉強してもあまり実務に役に立たなかったりということに悩んでおりました。

その悩みを解決する本を見つけましたので、早速紹介させて頂きます。
最近の学びでは、本と動画が連動していて、本にQRコードが付いていて、YouTube動画で講師の方が分かりやすく説明して下さる、「本×動画」という新しい学び方に目から鱗でした。

動画登録者20万越えの教育系YouTuberでお馴染み、Yousefulの長内孝平氏、神川陽太氏のExcelとスプレッドシートの本では、「現場の教科書」というタイトルが付いてある通り、実務に直結した内容をまずは本で要点を掴んで、動画で詳しく解説して下さっています。
個人的にはお二人の動画最後の「See you next time! Bye Bye!!」が好きで勉強のモチベーションが上がる教材です。

講師の長内氏も神川氏も私よりもだいぶ若い方ですので、私にとってはまさに中高年の学び直しという感じですね。

若い方から教わることに抵抗のある方もいらっしゃるかも知れませんが、Yousefulの講師の方は親しみやすいので大丈夫です!

ロスジェネ世代の方達は、いずれは若い方から学び直しなどで教わることも沢山出て来ると思います。
ですので、本や動画を通して若い方から教わることに慣れて置くというのもこれからより良く生きる為に役立てると私は考えております。

できるYouTuber式 Excel現場の教科書
ビジネス教育系ユーチューバー長内孝平氏

ベストセラー1位に輝いたExcelの本です。
長内氏はMicrosoft本社が公式で認めるテクノロジーの専門家であり、徹底的な分かりやすさで語りかけるように動画でExcelを教えて下さっています。
学習用のサンプルも付いています。

できるYouTuber式 Googleスプレッドシート 現場の教科書
神川陽太氏 & 長内孝平氏

この本には、スプレッドシートだけでなく、Excelではどう解くのかも書かれているので、スプレッドシートとExcelの復習を同時に行いたい方には、かなりオススメです!
教材のサンプルのスプレッドシートは閲覧用ですが、コピーをして自分のスプレッドシートに貼り付けて演習を行うことが可能です。

皆さま、大変お疲れ様でした。
この記事最後のブレイクタイムPhotoは・・・

2019年4月撮影の西新宿です。

仕事や勉強のリフレッシュに、趣味で写真を撮っておりますので、宜しかったら フォトストック写真ACさん の投稿もご覧頂けますと、大変嬉しい限りでございます!!

こちら、無料の「ダウンロードユーザー」に登録して頂けると、無料で写真のダウンロードが可能になります。

※ 先にGoogleアカウントを作成して頂くと、登録が ラク です♪

写真素材素材【写真AC】

 

最後までご精読、誠にありがとうございました!!

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

■ 関連記事 ■

自己紹介

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

急にプレゼン資料を作ることになったから手っ取り早くパワポ教えてくれ

Wordのポイントを手っ取り早く教えてくれ!!!

コロナ禍・アフターコロナのテレワーク対策(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で東京都のオススメ観光スポットを例に、テーブルの作り方やスライサーの使い方が勉強出来ます。

こんな感じの表を用意します。

「地味です( ;∀;)」って感じの表ですね。

これを管理しやすくするために、
テーブルに変換します。

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

[Ctrl] + [T]

を押します。


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

こんなふうになりました。
デザインは、「テーブルデザイン」の「デザイン」の、
テーブルスタイルから好きなモノを選びます。

ここ、クリックすると、色々出て来ます。
勿論、デザインを適用しないで、左上の「なし」にして、
好きな色を付けることも可能です。

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

お疲れ様でした。
ここで一旦、写真で休憩を挟みます。

写真は、立川市の国営昭和記念公園で撮影したひまわりです。

次に行きます。

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

チェックを入れて、Enterを押すと、
フィールド(列ごと)のスライサーが挿入されます。

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

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

行が絞られましたね。

下町のスポットが強調されます。

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

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

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

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

Windowsに話を戻します。

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

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

お疲れ様でした。
ここで一旦、写真で休憩を挟みます。

写真は、スカイツリーとすみだ水族館です。

OLYMPUS DIGITAL CAMERA




Excelもスプレッドシートも、学ぶ範囲が広すぎたり、自分が頑張って勉強してもあまり実務に役に立たなかったりということに悩んでおりました。

その悩みを解決する本を見つけましたので、早速紹介させて頂きます。
最近の学びでは、本と動画が連動していて、本にQRコードが付いていて、YouTube動画で講師の方が分かりやすく説明して下さる、「本×動画」という新しい学び方に目から鱗でした。

動画登録者20万越えの教育系YouTuberでお馴染み、Yousefulの長内孝平氏、神川陽太氏のExcelとスプレッドシートの本では、「現場の教科書」というタイトルが付いてある通り、実務に直結した内容をまずは本で要点を掴んで、動画で詳しく解説して下さっています。
個人的にはお二人の動画最後の「See you next time! Bye Bye!!」が好きで勉強のモチベーションが上がる教材です。

講師の長内氏も神川氏も私よりもだいぶ若い方ですので、私にとってはまさに中高年の学び直しという感じですね。

若い方から教わることに抵抗のある方もいらっしゃるかも知れませんが、Yousefulの講師の方は親しみやすいので大丈夫です!

ロスジェネ世代の方達は、いずれは若い方から学び直しなどで教わることも沢山出て来ると思います。
ですので、本や動画を通して若い方から教わることに慣れて置くというのもこれからより良く生きる為に役立てると私は考えております。

できるYouTuber式 Excel現場の教科書
ビジネス教育系ユーチューバー長内孝平氏

ベストセラー1位に輝いたExcelの本です。
長内氏はMicrosoft本社が公式で認めるテクノロジーの専門家であり、徹底的な分かりやすさで語りかけるように動画でExcelを教えて下さっています。
学習用のサンプルも付いています。

できるYouTuber式 Googleスプレッドシート 現場の教科書
神川陽太氏 & 長内孝平氏

この本には、スプレッドシートだけでなく、Excelではどう解くのかも書かれているので、スプレッドシートとExcelの復習を同時に行いたい方には、かなりオススメです!
教材のサンプルのスプレッドシートは閲覧用ですが、コピーをして自分のスプレッドシートに貼り付けて演習を行うことが可能です。

皆さま、大変お疲れ様でした。
この記事最後のブレイクタイムPhotoは・・・

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

仕事や勉強のリフレッシュに、趣味で写真を撮っておりますので、宜しかったら フォトストック写真ACさん の投稿もご覧頂けますと、大変嬉しい限りでございます!!

こちら、無料の「ダウンロードユーザー」に登録して頂けると、無料で写真のダウンロードが可能になります。

※ 先にGoogleアカウントを作成して頂くと、登録が ラク です♪

写真素材素材【写真AC】

 

最後までご精読、誠にありがとうございました!!

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

■ 関連記事 ■

自己紹介

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

急にプレゼン資料を作ることになったから手っ取り早くパワポ教えてくれ

Wordのポイントを手っ取り早く教えてくれ!!!

コロナ禍・アフターコロナのテレワーク対策(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月)合格報告

Java 配列とループでギャルゲー風妄想デートm(=^・^=)m

彼女いない歴=年齢の、恋愛弱者な私は、プログラミングで恋愛の妄想します。

ギャルゲーのデートシーンと、
グッドエンドをイメージしたプログラムをJavaで作ってみました。
処理の流れはこちらのフローチャートになります。

デートスポットを配列に格納して、
「自然と触れ合う?」や、「飛行機見る?」などの選択肢を
選んでいくと、該当するデートスポットが格納されている配列の範囲を
ループで回して、デートシーンを再現します。

例えば、彼女との妄想デートで、飛行機を見に行くとします。
デートスポットの配列は、このようになっています。

これが配列「デートスポット」です。

海に行く場合は、startを要素0、goalを要素1

公園に行く場合は、startを2、goalを4

飛行機を見る場合は、startを5、goalを6

その他夜景の場合は、startを7、goalを9

で、ループで取り出して行きます。

では、名前を入力します。
「猫」

彼女の名前は、推しの名前を入力します。

今回は、飛行機を見に行くことにします。
「自然と触れ合う?」はNoにするので、0を入れます。

「飛行機見る?」はYesにするので、1を入れます。

すると、妄想デートが始まります。
(他のファンの方に怒られる!! 妄想だから許してね)

で、配列に格納されたデートスポットのループを使った取り出しは、
赤枠で囲いました。

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

import java.util.Scanner;
public class MoSodate{


//デートスポットを配列に格納する
public static String[] Datespot={“房総半島外房の御宿、”,”江ノ島”,”新宿御苑、”,”代々木公園、”,”水元公園”,”モノレールに乗って、”,”羽田空港第一ターミナル”,”スカイツリー天望回廊、”,”横浜ランドマークタワー、”,”工場夜景を見”};

//プログラムの実行開始位置となるmainメソッド
public static void main(String[] args){
String yourname,hername;
int nature,sea,airplane;//デートスポットのカテゴリー指定
int start,goal;//配列の要素の開始位置と終了位置
int i;//ループカウンタ

//環境に依存せずに改行させる
String br = System.getProperty(“line.separator”);
Scanner scn=new Scanner(System.in);

System.out.println(“あなたのお名前–>”);
yourname=scn.next();
System.out.println(“お相手のお名前–>”);
hername=scn.next();

//デートの場所は、どこにする?
System.out.println(“自然と触れ合う? yes=1,no=0 –>”);
nature=scn.nextInt();
if(nature==1){
System.out.println(“海行く? yes=1,no=0 –>”);
sea=scn.nextInt();
if(sea==1){
start=0;
goal=1;
}
else{
start=2;
goal=4;
}
}
else{
System.out.println(“飛行機見る? yes=1,no=0 –>”);
airplane=scn.nextInt();
if(airplane==1){
start=5;
goal=6;
}
else{
start=7;
goal=9;
}
}

System.out.println(yourname + “は、”+hername+”と、デートした。”);
//デートスポットのループ
for(i=start;i<=goal;i++){
System.out.print(Datespot[i]);
}
System.out.println(“に行った。”);
System.out.println(br+hername+”: 「”+yourname+”さん、楽しかった。”+yourname+”さん大好き(ハート)」”+br+br+hername+”は”+yourname+”に抱き付いた。”);
System.out.println(yourname+”さんと”+hername+”さんは結婚し、子宝に恵まれて幸せに暮らした。”+br+br+”めでたし、めでたし(=^・^=)”);
}
}

令和元年に、羽田空港に行って撮影して、
その中から選んだ写真を動画にしました。
趣味で写真やっています。
良かったら見てやってください(=^・^=)
写真で癒し

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