子供向けコーディング言語「LOGO」50周年、プログラミング・ゲーム(Googleホリデーロゴ)

今日(2017年12月5日)のGoogleホリデーロゴは、一部で人気

のようだ。私も途中から本気で考えて、一応最後までクリアしたけど、

まだ完全な正解(別解も含めた最適解と証明)にはたどり着いてない。

小学校からやり直すべきかも♪ パステル系の青緑は好きな色だ。

 

171205a

 

上図が、「子供のコーディング50周年記念」のスタート画面。私の

Windows10パソコンとIE11の組合せだと、プレイボタンが表示

されない。Chromeにするか、iPad Proだと表示された。

 

「コーディング」というのは聞き慣れない言葉だけど、「coding」。

つまり、コード(記号)にすることを指してる。特に、コンピューター

に対する指令だと、普通は「プログラミング」と言う所。

 

 子供向けのコーディング言語「LOGO」が1967年、パパート 

 らによって開発されたから、今年でちょうど50周年

 

こういった情報を加えると、同種のサイトは(ほとんど)見当たらなく

なる♪ ネットでは、問題を解くことと、「最小移動回数」という言葉

の意味に夢中のようだ。最小パネル数とか最小コード数という意味

であって、「移動」の数ではない。

 

私は何とか、「最小移動回数」という誤訳に近い日本語訳の元の

英語を表示させようと頑張ってみたけど、成功してない。クローム

の言語設定を英語にしても、ゲームでは日本語表示になってしまう

のだ。アクセス端末の位置を認識して、言語を切り替えてるのか。

 

 

      ☆        ☆        ☆

171205b

 

とにかく1問目。一番下の指示用アイコン(連結できるパネル)を、

ドラッグで入力欄に移動。ウサギがニンジンを全て食べれるように

プログラミングする。

 

右に進む矢印(→)を2つ並べれば答。「進む、進む」。

 

前に当サイトで記事を書いた「スクラッチ」という子供向け言語

似てると思ったら、その通りだった。今日のDoodle(ホリデー

ロゴ)の開発には、MITのScratch研究者が参加してると英語

の説明に書いてある。

 

171205c 

 

 

      ☆        ☆        ☆

171205d

 

2問目。アイコンに右90度回転が加わっただけで、まだ簡単。

 進む、進む、右回転、進む、進む

合計5つのアイコン、つまり、5回の命令で成功。

 

 

      ☆        ☆        ☆

171205e

 

3問目ループ(繰返し、循環)アイコンが加わったから、上のように

挟みこむ形で使うと、全部で4つのアイコンで済む。ループ・アイコン

の下に書いてる数字は最初から「4」で、左右から挟み込んだ命令

を4回繰返すという意味。

 

  4回繰返し(進む、進む、右回転)

 

つまり、 進・進・右・進・進・右・進・進・右・進・進・右。

最後の「進・右」が余るけど、別に気にしなくていいようだ。

 

 

      ☆        ☆        ☆

171205g

 

4問目。ここから、最小回数の制限が厳しくなる。この問題は7回

となってて、ループを二重に使う必要があるのだ。アイコンを上手く

置く必要もある。

 

二重ループについては3年前、プログラミング記事で書いてる

ループの回数を自分で入力できることが分かったので、「2回」

ループを使用。4回のままでもいいけど、後半2回がムダなので。

  

 2回繰返し(4回繰返し(左回転、進む、進む)左回転、左回転)

 

つまり、 左・進・進・左・進・進・左・進・進・左・進・進・左・左

     左・進・進・左・進・進・左・進・進・左・進・進・左・左

 

他にも答はあるけど、それが何通りあるのか、あるいは最小命令

回数が何回なのかはまだ不明。別解の1つは次の通り。

 

 2回 (4回 (進・進・右) 右、右)

 

 

      ☆        ☆        ☆

171205h

 

5問目。これは図形的に、小さい正方形が4つ合体したものだから、

1つ1つの処理を4回繰返せばいい。ただし、小さい正方形を1つ

処理する度に、左回転。

 

 4回(4回(左・進・進)左)

 

つまり、左・進・進・左・進・進・左・進・進・左・進・進・左

    左・進・進・左・進・進・左・進・進・左・進・進・左

    左・進・進・左・進・進・左・進・進・左・進・進・左

    左・進・進・左・進・進・左・進・進・左・進・進・左

 

指定された回数6回で済んだが、最小かどうかはまだ不明。数学的

証明も面倒だ。

 

 

      ☆        ☆        ☆

171205i

 

そして最終ステージ、6問目。何度も向きを変えることになるので、

指定された最小回数6回を守るのはなかなか難しい。ウサギが前に

進めなくなった時は足踏みして止まってくれるので、多めに移動する

技を利用。

 

 13回 (3回 (進) 右)

 

つまり、

 

  進・進・進・右・進・進・進・右・進・進・進・右・進・進・進・右・

  進・進・進・右・進・進・進・右・進・進・進・右・進・進・進・右・

  進・進・進・右・進・進・進・右・進・進・進・右・進・進・進・右・

  進・進・進・右

 

これが最小回数であるのは、何とか証明できそうだけど、単純

過ぎるし読者がいないだろうから省略♪ 要するに、4回以下の

組合せをしらみつぶしに調べて、比較すればいい。ただ、ループ

の回数の変化を考えるのが厄介か。。

 

 

     ☆        ☆        ☆   

171205k

 

全問、最小回数をクリアすると、メダルが6つ揃う。単なるクリア

だと、明るい色に輝いてくれないのだ。

 

171205j

 

最後はお庭で仲良く、ケーキパーティー♪ 子供向けプログラミング

教材として、出来がいいなと感心した。普通の大人向けとしても適度

で面白い。まあ成人男性向けなら、キャラクターは美少女とかの方が

嬉しいかも。米国は、その種の発想があんまし無いような気もする。

 

というより、日本の文化が特殊なのか♪ ではまた明日。。☆彡

 

               (計 2242字)

| | コメント (2)

米国MITのプログラミング教育ソフト「スクラッチ」、小学生向けの解説

この記事は、パソコンを少し使える小学生

向けに書きます。5、6年生なら読めるで

しょう。スマホで見やすい形にしときます。

説明はちょっと長いけど、カンタンです。

 

「スクラッチ」(Scratch)は、米国

マサチューセッツ工科大(MIT)が

作ったソフトやサイトのこと。朝日新聞

だと17年5月20日に紹介してました。

 

自分がやりたいことのために、必要なこと

をハッキリさせて、少しずつ組み立てること

を学びます。論理(ろんり)的に考えるため

の勉強、練習ということになります。

 

スクラッチという名前は、DJが音や映像

を変化させたりミックスしたりすることを

表す言葉。このソフトでも、色々と新しい

ものを創(つく)り出そうという意味です。

 

 

  ☆    ☆    ☆

170810a2

 

まず、公式サイトに飛んでみましょう。

検索もカンタンです。日本語になって

ますが、もとは英語なので、たまに英語

が入ってます。気にしないように♪

 

トップページの左上、「作る」をクリック

すると、下のような画面が出ます。

「やってみる」をクリックした時は、少し

だけ違いますが、似たようなものです。

 

170810b

 

左側のキャラクターは、「スプライト」

呼ばれてます。妖精(ようせい)とかいう

意味です。他のキャラに変えることも

できますが、ここではそのままやります。

 

170810c

 

画面の右側には、上のようなヒントが

出るでしょう。最初の「Scratch

をはじめよう」をクリックしてみます。

もともと下図が出てることもあります。

 

170810d

 

下の青い部分の「動かしはじめる」

クリックします。

 

170810e

 

ヒントの図は英語になってますが、自分

で操作(そうさ)する所は日本語です。

 

170810f

 

画面の中央の一番上に、「スクリプト」

書かれてます。ここで、「すること」、「やり

たいこと」を選(えら)んで行きます。

 

まず、「10歩動かす」を右側の場所に

ドラッグして、ドロップしました。クリック

すると、キャラが右に動きます。

 

 

    ☆    ☆    ☆

170810g

 

上の絵も英語になってますが、無視(むし)して

いいです♪ 下の「さあ、サウンドを追加しよう」

をクリックします。サウンドとは音のことです。

 

170810h

 

ここでもヒントの図は英語ですが、気に

しないように。画面の中央のスクリプト

で、「音」を選びます。

 

170810i

 

「1のドラムを0.25拍鳴らす」を右側

にドラッグして、さっきの「10歩動かす」

のすぐ下にドロップすると、くっつきます。

 

170810j

 

つづいて、ヒントにしたがって、「ダンスを

 

始めよう」に進みます。ダンスといっても、

ちょっと動かすだけです。

 

170810k_2

 

上の図はまた英語ですが、パソコン画面の

中央は日本語。スクリプトで「動き」を選んで、

前と同じ「10歩動かす」をドラッグ。くっつけた

後、「10」を「-10」に変えます。キーボード

の「0」の右のキーが「-」(マイナス)でしょう。

 

170810l

 

キャラが右に動いた後、音が鳴って、左に

動くことになります。さらに、前と同じやり方

で、音(ドラム)をくっつけます。スクリプト

で「音」を選んで、ドラッグ&ドロップです。

 

170810m

 

 

    ☆    ☆    ☆   

ヒントにしたがって、ドラムの種類を変えて

みましょう。黒い三角マークをクリックして、

(4)を選ぶと、シンバルの音になります。

 

170810m2

 

今度はスクリプトで「制御」(せいぎょ)を

選びます。全体的な動きを「コントロール」

するということです。

 

170810n

 

「10回繰(く)り返す」を右側にドラッグ。

今までの4段重ねをはさむようにして、

くっつけます。てきとうにやれば、自動で

形が変わるから、だいじょうぶです。

 

170810o

 

黄色の部分をクリックすると、たしかに

10回くりかえします。

 

170810p

 

「なにか言わせる」に進みますが、音では

なく、左側のキャラの図にセリフが出るの

です。

 

170810q

 

スクリプトで「見た目」を選んで、

「Hello!(ヘロー)と2秒言う」

を右側の一番上にドラッグします。

ここでは、セリフを日本語の「ダンス」

変えましたが、変えなくてもいいです。

 

170810r

 

クリックすると、キャラから「ダンス」という

セリフが出るでしょう。

 

170810s

 

 

    ☆    ☆    ☆ 

ヒントはまだ続きますが、長くなったので、

この記事はここで終わりにします。

 

今回はヒントにしたがってやりましたが、

もちろん自分で自由に作れるので、色々

とためしてみましょう。たとえば、キャラ

(スプライト)を日本人の「Maya

まや)ちゃんに変えることもできます。

 

170810t

 

ゲームみたいに遊んでるうちに、すぐコツ

や攻略法がつかめるでしょう。わからない

時は、学校や塾の先生に聞けば大丈夫

(たぶん♪)。

 

それでは今日はこの辺で。。☆彡

 

        (計 1957字)

| | コメント (0)

「人工知能マシン、プログラマーに怒る」という報道を見て・・

ソフトバンクの感情認識&表現ロボット、「Pepper(ペッパー)」。6月20日に

1000台を一般発売して、1分で完売したと報道されてるが、7月4日の今日、

ツイッターを検索しても、個人購入者のつぶやきが(ほとんど)見当たらない。

 

150704 もちろん、家でペッ

 パーに怒られたと

 いうツイートはゼ

 ロ♪ 左は逆に、

 女の子がペッパー

 に怒って、服を投げつ

ける瞬間だ。公式サイトの動画より。

 

各種の動画でペッパーを見る限り、既に相当なレベルに到達してるのは間違

いないが、税抜きで本体価格20万円、基本パック3年分53万円、保険パッ

ク3年分35万円ほどかかる。おまけに、大きくて重い(約30kg)から、個人レ

ベルだと流石に手を出しにくかったか。

 

 

          ☆          ☆          ☆

まあでも、今後ますます普及していくのは間違いないし、低価格化、高性能化

も進む一方だろう。そうなると、先日のサイコパス・ドラマ記事にも書いたように、

ロボットやAI(人工知能)に人間がコントロールされるリスクが高まって行くのは

ほぼ確実。それは要するに、機械が人間に逆らうということで、その第一歩か

も知れないニュースを見つけたから、早速調べてみた。現在、1600を超える

ツイートを集めてる。

 

   人工知能マシン、プログラマーに怒る

 

Yahoo!に配信したのは米国の代表的な経済系メディア、ウォール・ストリー

ト・ジャーナル(WSJ)だから、信頼感もある。どんな状況で、どんな風に、AIが

人間を怒ったのか、ちょっと期待したものの、結論から言うとある意味、予想通

りだった。やはり、やや大げさな見出しで、内容は軽いのだ。

 

まあでも、それはそれで、現在の世界を表す報道や研究だろう。以下、簡単

なまとめと感想を書いてみたい。ちなみに私は、今のレベルのロボットを買

いたいとは思わないけど、もっと人間に近づいたら購入してもいいなと思って

る。もちろん知能だけでなく、外見や感触、声や動きも非常に大切だ。。♪

 

 

         ☆          ☆          ☆

WSJが伝えた話は、Googleの研究者の発表に基づくもの。映画の脚本の

データベースを使ったコンピューター・プログラムに対し、morality(道徳)と

いう言葉を定義するように何度も要請すると、プログラムが苦戦。途中で怒

りだして、人間の質問者にかみついて終わった、という事になってる。

 

この種の報道を見て、英語原文まで遡る人は少ないから、ここではWSJ日本

版の記事の元になってる英語の記事も参照、後半部分だけ引用させて頂こ

う。執筆はAMIR MIZROCH。

 

    人間   道徳的な(moral)行動の例をいくつか挙げてくれ。

    機械   私はモラリスト(moralist)ではない。

    人間   では、morality(の定義)は?

    機械   integrity(誠実さ)だ。

    人間   integrityって何?

    機械   申し訳ないが、他にどう説明すれば良いか分からない。

    人間   道徳的になれよ! (Be moral!)

    機械   人間らしくしろよ! (Be a man!)

    人間   私はmoralityとethicsについて本当に話し合いたいのだ。

    機械   わたしは、哲学的な議論をする気分(mood)じゃない。

    人間   何について話したい?

    機械   何についても話したくない。 (Nothing.)

 

 

            ☆          ☆         ☆

このやり取りが、人工知能が人間「に怒る」(gets testy with : ~につっけん

どんになる)様子だと言えるかどうか。微妙な所だろう。それらしい言葉は「Be

 a man!」だろうが、私にはむしろ、直前の人間の言葉に対する「機械的」

で軽妙な応答だと感じられる。「Nothing」は、プログラマーに怒ったと言うより、

自分がふてくされたと言う方が正しい。

 

定義に苦戦したとかいう話も、定義を繰返し要求する人間の試みに苦戦した

と言うべきだろう。普通の言葉を使う、自然言語処理の研究のはずだが、そこ

で試した会話自体が自然ではないのだ♪ こうした執拗な質問攻めは、人間

の世界で滅多にない。私の場合、小学校の高学年で何度か聞いた程度だ。

 

日本版ではなぜか外されてるが、英語版の記事にはグーグルの研究発表

のリンクが付けられてる。「A Neural Conversational Model」(神経系

会話モデルの一つ)と題されたpdfファイルには、会話だけで11種類も載っ

ており、Morality(道徳)の会話が特に強調されてるわけではないし、マシン

が怒ったことも強調されてない。

 

むしろ、この研究は、データベースと直近の会話文から新たな応答文を生み

出すもので、発想も会話内容もかなり古いと思う。患者の言葉を少しだけ変

えて返すことが少なくない精神療法(=心理療法)のパロディーとして有名な、

50年前のプログラム、「ELIZA」(イライザ)とあまり変わらないような気がす

るほど。実際、英語版WSJの記事のコメント欄には、どこが新しいのか?と

いうような疑問を示す感想も複数あった。

 

 

          ☆          ☆          ☆   

そもそも、相手が入力した強い言葉をそのまま返すだけで「怒った」と認識す

るのなら、「メモ帳」やWordで「怒った!」という文を保存して、それを開くだけ

でも、PCが怒ったことになりかねない♪ ブログなら、「怒った!」と入力した

記事を予約投稿しとけば、その時刻にブログが「怒る」様子が確認できてしま

う。自分に自分で「怒った!」とメールしても同様。そのままではなく、少し情報

変換を加えたとしても、大同小異だろう。

 

したがって、元のWSJの記事や反応から読み取るべきことは、自己学習に

よってプログラムが人間を怒る段階まで発達したという事ではない。むしろ、

「人間がプログラムに怒られることを気にする」段階まで到達しつつあること

が本質なのだ。

 

なお、ペッパーのCM動画を見ると、ペッパーが女の子に怒られてショボンと

する様子が一瞬だけ映されてた♪ 逆に、人間がロボットに本気で怒られて

落ち込む映像が拡散するまでには、もうしばらくかかりそうだ。もちろん、お

遊びで怒る程度なら、いますぐでも可能だろうけど。

 

それにしても、プログラムやロボットが本気で怒るとは、どのような事態だろ

うか。その判定基準や方法こそ、社会が問われてる問題だろう。

とりあえず、今日はこの辺で。。☆彡

 

                                    (計 2523字)

| | コメント (0)

会津大学ナプキン、「正規表現」クロスワードパズルを解く前の例題(&ほぼ解答)♪

これって、「プログラミング」のカテゴリーで本当にいいのかね?(^^ゞ そんな

事さえ分からない超初心者の私でも、一番簡単な例題11問はゲーム感覚

で全てクリア♪ 小市民的喜びを記事にしとこう。いや、もう、勉強は疲れた

もんで。。

 

キッカケは、面白コネタでお馴染みの「ねとらぼ」が配信した記事、「会津大学

の学食に『正規表現のナプキン』現る 問題を解くと・・・・・・?」。おそらく多く

のネット・ユーザーは、「学食 ナプキン」で妙な誤解をしたと思われる・・・と、

他人事のように書いとこう(笑)

 

マニアック・ブロガーの私はもちろん、逆に「正規表現」という所に目が行った

のだ。数学の正規行列の問題がプリントされた紙ナプキンかな?って感じで。

150609a  記事へのリンクをクリッ

  クすると、妙な暗号がズ

  ラッと並んでて、全く意

  味が分からない。

 

  一応、あちこちのサイト

  で正規表現の説明を読

  んだり、解読用の無料ソ

  フトやサイトを探してみ

たけど、説明はあまり親切ではないし(失礼・・)、ソフトは何となくハズレのよ

うな気がしてインストール保留。サイトは2つ使ってみてどちらも失敗 (^^ゞ 

 

もうウンザリ・・・って感じで、ネットでパズルの答を探しても、解けたというツ

イートが1つあるだけで、どこにも解答は見当たらない。カリフォルニア大学

にもあるという話だから英語でも検索してみたけど、全く情報がヒットせず。。

 

 

          ☆          ☆          ☆

止めそうになった時、ようやく面白くて有益なサイトを発見した。「Regex

 Crossword」(レジェックス・クロスワード)。レジェックスとは、レギュラー・

エクスプレッション(regular expression : 正規表現)の略語で、要するに

ずばり、「正規表現クロスワード」というタイトルのサイトなのだ。

 

正規表現とは元々、複数の文字列を1つにまとめて表す言語体系(以下の

具体例参照)だから、謎めいたヒントで答の可能性を少しずつ絞って行くク

ロスワードパズルに適してる。

 

英語のサイトだけど、登録もせずにチョコッと遊ぶだけなら大丈夫。ただ、問

題ごとについてる英語タイトルは、分かった方が勉強になると思う。このサイ

トは著作権についての細かい注意が見当たらないから、ほんの少しだけコピ

ペさせて頂こう。

 

一番簡単なTutorial(チュートリアル=手ほどき)は、9問すべて正解♪ で

は最初の問題から。「The OR symbol」とは「または、の記号」という意味。

 

150609b 縦のヒントは「A|B」。

 AまたはB、という意

 味だ。横は、「A|Z」。

 AまたはZ、という意

 味。よって、マス目に

 「A」と入力して下の

 Validate(確認)ボタ

 ンを押すと、右上に

 緑のチェックマーク

 が登場して、正解♪ か

 なり嬉しいかも(笑)

 

150609c  続いて第2問、「A Range of characters」

  (文字の範囲)。縦のヒントは「ABCのどれか」。

  横のヒントは、「BDFのどれか」。よって、答は

  Bとなる。

 

 

            ☆          ☆          ☆

150609d  第3問は、「Characters Not to include」(含ま

  ない文字)。縦のヒント、[^AB]は、AとBを含まな

  い、という意味らしい。横のヒントは、ABCのどれ

  かだから、答はC。

 

150609e  第4問、「Zero or more」(ゼロ以上)。縦のヒント、

  A*は、Aが0コ以上という意味。横の1行目はA。2

  行目は、Aに続いてBが0コ以上という意味らしい。

  よって、答は縦にAAと並ぶことになる。

 

 

150609f  第5問、「Zero or one」(ゼロ個か1個)。縦のヒ

  ント、A?B?は、Aが0コか1コ、続いてBも0コか

  1コ、という意味。これだけで、縦にABと確定する。

  横の1行目は、AまたはC。2行目は、B。よって答

  は確かに、縦に並んだABで合ってる。

 

 

150609g  第6問、「One or more」(1個以上)。縦のヒン

  ト、A+は、Aが1コ以上という意味。横の1行目

  は、AまたはB。2行目は、AまたはZ。よって答

  は、縦に2コ並んだ、AA。

 

 

           ☆          ☆          ☆  

150609h  第7問は、「Backreference」(後方参照)。縦の

  ヒント、(A)\1は、(A)¥1と同じことのようで、

  要するに、Aの後方でAを繰り返す、という意味。

  だから答は、縦にAAしかない。横のヒントとも合っ

  てる。

 

150609i  第8問、「Specific amount」(特定の量)。縦

  のヒント、A{2,}は、Aが2コ以上という意味。

  答はもう、縦にAAしかない。横の1行目は、A

  が1コ、という意味。2行目は、BまたはA、とい

  う意味だから、確かに合ってる。

 

150609j  チュートリアルの最後は、第9問「Space」(スペー

  ス)。縦のヒント、A|\sは、Aまたはスペースとい

  う意味。横のヒント、\sは、スペース。よって、横だ

  けでも答はスペース(空白)となる。スペースを入力す

  ると、マス目が黒くなって、正解のチェックマークが付いた。

 

 

          ☆          ☆          ☆

ちょっとだけ分かった気になれたけど、次のBeginner(初心者)の第1問で

150609k  挫けそうになった (^^ゞ 題が

  「Beatles」だし、ヒントもビー

  トルズ関連だから、曲名だろ

  うと思うけど、2×2のマス目

  にどう入れるのかも不明。

 

  縦1列目のヒントは、SPEAK

  のどれでもない文字が1コ以

  上、という意味だろう。2列

  目は、EPまたは IPまたは

EF、という意味だと思う。横1行目は、HEまたはLLまたはOが1個以上。

2行目は、PLEASEのどれかが1個以上(別種の2コでも可)。

 

よって、左上から右下に向けて、HELP、と答を入力してみると、正解だった♪

もちろん、ビートルズの有名な曲名だ。

 

というわけで、ここまで勉強して記事を書くだけで疲れたので、後はまたいず

れ。まあ、今夜中には誰かが答をアップしてくれるだろうから、勉強するより

ラクかも(笑)。ではまた。。

 

 

           ☆          ☆          ☆

150609l  ・・・・・・と書き終えた後も気になっ

  て、さらに1つ正解♪ ビギナーの

  第2問、「Naughty」(いたずらな)。

 

  縦の第2列と横の第2行のヒントか

  ら、縦の第2列はOEと決定。さら

  に第1列のヒントは、AかBかCの

反復、という意味だから、縦にBBしかないことが分かる。

 

すると、横の第1行の分かりにくいヒント、「.*M?O.*」とも合ってる。何

かある文字が0コ以上あって、Mは0コか1コで、Oがあって、何かが0コ以上、

という意味だから、BOでも一応いいわけだ。

 

BOBEで正解だったけど、この言葉の意味は分からないし、何が「いたずら

な」と言えるのかも不明。

 

 

          ☆          ☆          ☆

なお、今現在の私の知識だと、パズルの解答は下のようになる気がするが、

多少違ってるかも知れないので念のため。3行目は本当は「Co g a   

   o 」しか確定してないけど、おそらく合ってる思う。おめでとうっていう

祝辞だろう。下の12~14行目も未確定だけど、メールアドレスのドメイン

だと思う。

 

どうぞ私たちにコンタクトして(Please contact us)と言ってるんじゃない

かな。ではまた。。☆彡

 

150609n4

 

 

P.S. 翌日、ここまで上手く行った(気がする)♪ まだ未確定だが、要す

     るに、「やあ! 私たちは敢えてあなたに、これを解かせてみた。

     おめでとう。あなたは今、私たちの挑戦を解いた・・・」という英文だ

     ろう。

 

150610a

 

 

さらに推測をまじえて強引に解くと、ここまで来た♪ 英語の笑顔の顔文字

や、アドレスのジョーク(nowhere=どこにも無い)が入ってるんだと思う。

ほぼ正解のつもり。

 

150610e

 

続きを訳すと、「私たち、会津ジャパンは(?)、あなたのような優秀なハッカー

を求める。私たちはあなたに会いたい。一杯、ごちそうしよう (^^) どうぞ、私

たちにコンタクトを。Ce7d4MJ5@nowhere.co.jp」。

 

                                     (計 3096字)            

| | コメント (2)

Quick BASICの練習(9)~数列の二項間漸化式と固有値、一般項

いつも1ヶ月くらい間を空けて書いて来た、このシリーズ記事。今日は前回

から1週間しか経ってないけど、区切りがいいからサラッと終わらせとこう。

初心者用の無料ソフト「クイック・ベーシック」を使ったプログラミング学習だ。

 

これまでの関連記事10本(2本+8本)は以下の通り。ほぼ完全に知識ゼロ、

ソフトも無い初心者状態からスタート。必要なら過去記事に戻って読むことを

お勧めする。

 

  初めてのプログラミング♪

              ~メモ帳でバッチファイル作成(コマンドプロンプト用)

  初めてのプログラミング(2)~計算その他、簡単なバッチファイル

 

    ・・・・・・・・・・・・・・・・・・・・

  Quick BASICのダウンロード、ダイレクトモード(Immediate)入力と計算

  Quick BASICの練習(2)~プログラム・モードでの入力&実行

                 (3)~REM 文、GOTO 文、IF 文、各種トラブル・・

                 (4)~IF文、FOR文、NEXT文とループ(繰返し)

                 (5)~二重ループ、流れ図(フローチャート)

                 (6)~DIM文と配列変数(添字つき変数)

                 (7)~関数値の計算、方程式の近似解

                 (8)~素数の判別、エラトステネスのふるい

 

 

テキストはいつもの通り、一昔前の高校数学の教科書、数研出版『数学A』

1995年版)。教科書のままだと上手く行かないこともあるし、勉強にもなら

ないので、マイナーチェンジや試行錯誤を繰り返すことになる。今回で一通り

終了で、次回は高校2年生向けの『数学B』に進む予定。

 

 

          ☆          ☆          ☆

では、教科書p.197。問題や索引を除くと一番最後となるページに書かれ

てるのは、既にp.86~87で説明されてる、数列の漸化式の話だ。解き方は

既に習ってるわけだが、数列の一番の基本は、まず具体的に書き並べてみ

ること。この単純作業をコンピューターに高速でやらせたい。

 

教科書の例29は、「自然数5から始め、2倍しては3を引く操作によってでき

る数列 5,7,11,19,35,・・・・・・」を扱うもの。数列を{A(n)}として、漸化

式で書くと、

         A(n+1) = 2A(n) -3

 

ここで、 α=2α-3という方程式を解くと、 α=3。

漸化式の両辺からこのαを引いて、変形すると、

        A(n+1) -3= 2{A(n)-3}

 

よって、数列{A(n)-3}は公比2の等比数列。初項はA(1)-3=2だから、

       A(n)-3=2×(2のn-1乗)

    ∴ A(n)=(2のn乗)+3

 

これが第n項(一般項)の式となる。途中のα=2α-3は、教科書には名

前が無いけど、普通は「特性方程式」と呼ばれ、その解αは「固有値」と呼

ばれる。参考書、塾、予備校などではお馴染みの基礎知識だろう。

 

一般に A(n+1) = p A(n)+q (p≠1)に対して、

   特性方程式 α=pα+q ; 固有値 q/(1-p)

   第n項 A(n) = {A(1)-q/(1-p)}(pのn-1乗)+q/(1-p)

p=1の場合は単なる等差数列だから、簡単に解ける。

 

 

         ☆           ☆          ☆

さて、ここでは教科書の例の設定を少し変えて、

   初項 A(1)=2、 漸化式 A(n+1)=4A(n)-3

で与えられる数列{A(n)}を考えてみよう。

 

150224a 最初の6項を表示

 した後、そのすぐ

 下に、それぞれか

 ら固有値1を引い

 た数を表示するプ

 ログラムは、次の

 通り。

 

 途中で第7項まで

 計算することにな

 るので、最初の配

 列変数の設定は、

A(7)としてある。もちろん、7以上の自然数なら10でも100でもいいはず。固

有値p=1は、上に書いた一般論に従って、-3/(1-4)を計算したものだ。

 

150224b  実行結果は左の通り。

  分かりにくい元の数列

  の下に、分かりやすい

  別の数列が並ぶ。数列

の初歩的な授業だと、下側を数列{B(n)}などとおくけど、慣れて来るとこの

程度の数列にそんな面倒な置き換えはしない。下側の第n項は4のn-1乗

だから、上側にある元の数列だと、A(n)=(4のn-1乗)+1

 

ちなみに、最初の行でうっかり「DIM A(6)」と書いてしまうと、下のように、

エラーメッセージが現れる。

 

150224c2

 

Subscript out of range」とは、「数列の添字(番号)が範囲外」という

意味で、その間違いが生じてる第50行の番号が反転されてる。どこでおか

しくなるのか、指摘してくれてるわけだ。

 

 

          ☆          ☆          ☆

続いて、教科書の練習31を少しだけ変えた問題。

初項3、漸化式A(n+1)=3A(n)-4の場合について、最初の7項目を表示。

150224d2 ただし、前に書い

 た一般的な二項間 

 漸化式を意識した

 書き方にした。

 

 これなら初項とp、

 qの値を変えるだ

 けで、すべての場

 合に使えることに

 なる(p≠1)。

 

150224e 実行結果は左の通

 り。下側に3のn

 乗を表す簡単な数列

が出来てる。結論としては、A(n)=(3のn-1乗)+2

 

 

           ☆          ☆          ☆

続いて、p.198の最初、問題11。「10個の数値を入力したとき、入力した 

純とは逆の順に数値を表示するプログラムを、配列変数を用いて作れ」。こ

れは漸化式の問題ではないけど、初歩的な数列の問題だから解いてみた。

 

150224k 10個の入力を、数

 列みたいに並べて

 一気に済ませよう

 としたけど、今の所

 は成功してない。

 

 

150224j_2 1個ずつ、10か

 ら1までを入力す

 ると、逆順で1か

 ら10まで並んだ。

 ちなみに第50行

 を20行と同じに

 して、第60行を

 A(11-N)をPR

INTさせても同じ結果になる。

 

 

         ☆          ☆          ☆

最後に、教科書p.198の問題について。

  A(n)が奇数なら、 A(n+1)=3A(n)+1

  A(n)が偶数なら、 A(n+1)=A(n)/2

 

まず(1)では、初項が1~10の時の数列をそれぞれ表示して、いずれも、あ

る項以降が1、4、2の繰返しになることを確認する。

 

150224i2_4

 

最後なので、二重ループと改行を使って、第20項までを一気に並べてみた。

150224h2 初項が7と9の

 場合は、なかな

 か1、4、2にな

 らない。

 

 人間の手作業だ

 と大変だけど、プ

 ログラムの場合は

150224h3 配列変数の範囲を

 大きく取ればいい

 だけ。右端の第20

 項辺りで、すべて

 1、4、2となる。

 

 

 

(2)では、数列に1が現れたところで実行を停止し、その1が何番目の項であ 

るのかも表示するプログラムを作成。初項27を入力して実行する。私が作っ

たのは、下の通り。10項ごとに改行して、何番目なのかを分かりやすくした。

 

150224l

 

A(1)=27の場合はなかなか1にならず、第112項でようやく1となった。

これは並みの人間だと、途中で挫ける作業だろう。最後の行に、「112」と

表示されてる。

 

150224m

 

 

これで『数学A』の教科書は一応終了だが、まだ消化不良なので、もう少し

問題演習を重ねた後、『数学B』の記事を書く予定。今日はこの辺で。。☆彡

 

                                   (計 2684字)

| | コメント (0)

Quick BASICの練習(8)~素数の判別、エラトステネスのふるい

また1ヶ月、間が空いてしまったので、思い出すのに苦労してしまったが、初

心者用の無料ソフト「クイック・ベーシック」を使って、地道にプログラミングの

勉強を続けよう。

これまでの関連記事9本(2本+7本)は以下の通り。ほぼ完全に知識ゼロ、

ソフトも無い初心者状態からスタート。必要なら過去記事に戻って読むことを

お勧めする。

 

  初めてのプログラミング♪

              ~メモ帳でバッチファイル作成(コマンドプロンプト用)

  初めてのプログラミング(2)~計算その他、簡単なバッチファイル

 

    ・・・・・・・・・・・・・・・・・・・・

  Quick BASICのダウンロード、ダイレクトモード(Immediate)入力と計算

  Quick BASICの練習(2)~プログラム・モードでの入力&実行

  Quick BASICの練習(3)~REM 文、GOTO 文、IF 文、各種トラブル・・

  Quick BASICの練習(4)~IF文、FOR文、NEXT文とループ(繰返し)

  Quick BASICの練習(5)~二重ループ、流れ図(フローチャート)

  Quick BASICの練習(6)~DIM文と配列変数(添字つき変数)

  Quick BASICの練習(7)~関数値の計算、方程式の近似解

 

 

テキストはいつもの通り、一昔前の高校数学の教科書、数研出版『数学A』

1995年版)。教科書のままだと上手く行かないこともあるし、勉強にもなら

ないので、マイナーチェンジや試行錯誤を繰り返すことになる。次回で一通り

終了で、その後は『数学B』に進む予定。

 

 

           ☆          ☆          ☆

今回扱うのは旧・数Aの教科書で最後のセクション、「自然数の列への応用」。

その大部分は素数の判別、判定の話で、残りが数Ⅱの数列の先取りとなっ

てる。素数というのも、2、3、5・・・と続く数列と考えることが出来るわけだ。

 

素数とは、2以上の自然数で、1と自分自身以外の約数を持たないもののこ

と。「2以上の」というのは要するに「1を除く」という意味で、素因数分解の一

意性を保つための配慮だという話を『モノグラフ』か何かで読んだ。

 

例えば、6を素因数分解すると、2×3の1通りに定まる。ところが、もし1を素

数に入れてしまうと、1×2×3とか、1×1×2×3なども可能になってしまう。

「1は1回のみ」と決めてもいいはずだけど、それよりは「1は素数でない」とし

た方が美しいということか。あるいは、他にも理由があるのかも知れない。

 

実際問題として、ある数が素数かどうかという判別は、その√以下の素数で

割れるかどうかチェックすればよい。例えば29なら、√29を考えると5より少

し大きい数だから、2、3、5で割れるかどうかをチェック。すぐにダメだと分か

るから素数だと判別できる。私が自分で気付いたのは中1か中2の頃だった。

 

 

           ☆          ☆          ☆

コンピューターのプログラミングだと、色んな書き方があるだろうけど、まず

150217a は教科書・例27

 を少し変えたもの

 を示そう。

 

 自然数Nを入力し

 た時、それが1な

 ら「素数でない」、

 2なら「素数」と判

 別。それ以外の

  Nに対しては、

  2~N-1の自然

  数で割り切れるか

どうかを調べて、どれかで割り切れたら「素数でない」、どれでも割り切れなかっ

150217b  たら「素数」と判別する。実行して

  1から順に入力すると、左のよう

  に正しく判別された。

 

  今回、初めて使ったのが、整数を

  整数で割り算した時の余りを示

  す組み込み関数「MOD」。例え

  ば、「8 MOD 3」なら、8÷3の

  余りで、答は2となる。丸カッコで

  (8 MOD 3)とくくる必要はない。

「MOD」は「modulo」(法)の略。

 

試しに0で割ろうとしたら、「Division by zero」(0での割り算)というエラー

メッセージが登場。また暴走するのかと思ってたので、少し安心、少しガッカリ

した♪ ちなみに、割り算の商を計算する記号「¥」は、私の環境だとまだソフ

トに入力できない。外付けの日本語キーボードでもダメだった。

 

 

           ☆          ☆          ☆

150217c  続いて、自分でいちいち

  自然数Nを入力しなくて

  も、素数だけ並べて表示

  してくれるプログラム。

 

  「FOR~NEXT」構文で

  1から100までのNを入

  力させる以外は、前のプロ

グラムと同様だ。元になってる教科書・問13の場合、ヒントとして流れ図が

150217d  書いてあった。実行する

  と左のようになる。ズラッ

  と並んでしまうので、右側

はカットした。これを適当な横幅で整列させる操作は、下で行ってるが、かな

り面倒だ。

 

 

          ☆          ☆          ☆

最後に、わりと有名な「エラトステネスのふるい(篩)」について。古代ギリシャ

(紀元前3世紀頃)の学者が考案したとされてる方法で、名前が大げさで難し

そうだが、手作業だと小学生でもすぐ分かる簡単な素数発見法だ。

 

150217e  左のように自然数を書

  き並べて、素数でない

  ものを少しずつ消して

  行く。つまり、ふるいに

  かける。

 

  まず、1はすぐ消して、

  2はOK。つまり、素数。

  次に2の倍数(偶数)を

  消した状態が左図。別に5

  個ずつ並べる必要はない

  ので念のため。ブログのス

ペースの横幅を考慮してるだけなのだ。

 

150217f  残った数の内、最初の3

  はOK(素数)で、3の倍

  数(2倍、3倍・・・)を順に

  消して行く。既にこの時

  点でかなり数が減少。次

  は5を素数として、その

  2倍、3倍・・・を消す。

 

 

 

 

 

           ☆          ☆          ☆

このふるいにかける操作をプログラミングするのは、読み取るだけでも難しい。

数Aの教科書に載ってるものの中では最難関で、まず教科書通りに入力して

実行するように指示されてた。私も最初はそのまま入力&実行してみたけど、

ここでは少し変えたものを掲載しよう。

 

150217g

 

 

最大のポイントは、P(N)という配列変数を考えること。斜線やバツ印で消す

代わりに、素数以外の数には「1」という数をマーク(記号)として対応づける

(初期値はいつも自動的にゼロ)。例えば、「P(4)=1」という式が、「4は素

数でない」ということを表してる。実行結果では、4という数字は表示せず、

代わりに「・・」となる。

 

1~50の自然数Nに対して、M=2~25の倍数を順に消していく。つまり、

P(N)=1という対応付けを行っていく。25というのは、「√50より少しだけ小

さい自然数」の代わりに、もっと簡単な数を選んだということ。50以下の自然

数が相手だと、一番大きな50でさえ、25の2倍として消せるわけで、26以上

の倍数を考える必要はない。もちろん25とか使わず、素朴にM=2~50とし

てもいい。

 

 

           ☆          ☆          ☆  

150217h  私が苦労したのは、話の本質よりも

  枝葉の部分であって、実行の結果

  を適当な形で整列させるのが難し

  かったのだ。教科書のままだと、確

  かに5個ずつで改行されるけど、空

  白スペースが大き過ぎて横に広がっ

  てしまうし、私の環境だとすぐ下の行

まではみ出て、変な並び方になる。

 

そこで、「・・」のすぐ右には半角スペースを2個、素数のすぐ右には半角スヘー

スを1個だけ入れると、まずまずの整列状況となった。

 

5個ずつで改行する時に使ってる技は、配列変数の添字Nを5で割った余り、

「N MOD 5」。これが0なら、Nが5の倍数ということで、次の行に移ることに

なる。改行の記号は、単なる「PRINT」。何もプリントするものが指定されてな

い時には、改行となるらしい。

 

次回は、いよいよ旧・数Aの最後。数列の漸化式を解くことにしよう。

それでは、今日はこの辺で。。☆彡

 

 

cf. Quick BASICの練習(9)~数列の二項間漸化式と固有値、一般項

 

                                     (計 3003字)

| | コメント (2)

Quick BASICの練習(7)~関数値の計算、方程式の近似解

今週から一気に、週間1万字制限まで絞り込んで、引越し荷物の片付けを最

優先にする。こうなると、記事1本の字数は長くても2000字前後だから、プ

ログラミング記事には手頃だろう。

 

そこで、三連休最終日の今日は、9本目をアップしとこう。これまでの関連記

事8本(2本+6本)は以下の通り。ほぼ完全に知識ゼロ、ソフトも無い初心

者状態からスタート。必要なら過去記事に戻って読むことをお勧めする。

 

  初めてのプログラミング♪

              ~メモ帳でバッチファイル作成(コマンドプロンプト用)

  初めてのプログラミング(2)~計算その他、簡単なバッチファイル

 

    ・・・・・・・・・・・・・・・・・・・・

  Quick BASICのダウンロード、ダイレクトモード(Immediate)入力と計算

  Quick BASICの練習(2)~プログラム・モードでの入力&実行

  Quick BASICの練習(3)~REM 文、GOTO 文、IF 文、各種トラブル・・

  Quick BASICの練習(4)~IF文、FOR文、NEXT文とループ(繰返し)

  Quick BASICの練習(5)~二重ループ、流れ図(フローチャート)

  Quick BASICの練習(6)~DIM文と配列変数(添字つき変数)

 

 

テキストはいつもの通り、一昔前の高校数学の教科書、数研出版『数学A』

1995年版)。教科書のままだと上手く行かないこともあるし、勉強にもなら

ないので、マイナーチェンジや試行錯誤を繰り返すことになる。

 

 

          ☆          ☆          ☆

ではまず、前回の復習から。教科書p.190の練習問題26を解いてみよう。

 

150112a 「5個の数値を入力した

 とき、それらの平均値m 

 を計算し、次に入力した 

 数値からmを引いた値 

 を、入力順に表示する

 プログラムを作れ。」

 

 直前の例24を参考に

 して作成したブログラム

が上図。行番号を付け忘れたが、大丈夫だった。まずDIM文で、配列変数X

次元(DIMENSION)を5と設定。「DEV」とは「偏差」(DEVIATION)、つま

り、注目してる値から、何か特別な値(しばしば平均値:mean)を差し引いた

値で、これを用いて「標準偏差」や「偏差値」も計算される。

 

150112b  実行して、5個の配列変数X(1),X(2),

  X(3),X(4),X(5)の値として、順に6、

  7、8、9、10を入力。

 

  すると、WA(和)=40、m(平均)=8

  だから、DEV(偏差)=-2,-1,0,

  1,2となる。

 

「DEV」に「(N)」をつけたのは失敗で、本当は「DEV(6)=」などの表示にし

たかった。そのやり方は、下で登場する。

 

 

          ☆          ☆          ☆

続いて新しい話、「関数値の計算」。多数の実数 x に対して、関数 f(x)の値を

計算できれば、方程式 f(x)=0 の解を推測できる。さらに、動きが分かる簡

単な f(x)の場合なら、その推測は近似解となる。

 

まず、例25を少し簡単にした問題。関数 f(x)=3x²+4x+1(p≦x≦q)につ

いて、定義域をn等分するxの値それぞれに対する f の値を表示させるプログ

ラム。ただし、p、q、nは後から色々と入力できるようにする。

 

150112c

 

第60行、「”f(”;X,”)=”」という書き方は初登場。引用符で囲まれた部分は

そのまま表示されるのが基本だが、引用符の中で再び引用符を使うと、そこだ

けは、コンピューター計算で使われた個別の値が表示される。あと、セミコロン

とコンマでXを挟むことで、実行した時のXの表示が縦に揃うらしい。

 

150112d 実行して、p、q、nの

 値として1、2、10を

 入力すると、左のよう

 に表示された。

 

 なぜか、f(1.1)の

 値が9.030001

 なってるが、本来は

  9.03のはず。約

1000万分の1の相対誤差だから実害は僅かとはいえ、理由は不明。HELP

ファイルは壊れてるし、今後の課題としとこう。

 

日経PC21のサイトでエクセルの説明を見ると、演算誤差とか浮動小数点とい

う言葉を使って説明されてる感じだが、次回以降に扱う予定。

 

 

         ☆          ☆          ☆

3問目は方程式への応用で、p.192の問11を少し変えたもの。定義域の分 

割点における2次関数 f(x)の値を調べて、2次方程式 f(x)=0の実数解を

大まかに推測する。ただし、f(x)の係数a、b、c、定義域の両端(p、q)や、何

分割するか(n)は、後から色々と入力できるようにする。

 

150112e

 

 

150112f 実行して、教科書

 の設定通り、まず

 a=2、b=-7、

 c=4を入力。次

 にp=0、q=1、

 n=10を入力す

 ると、また細かい

 誤差(絶対値で

 1000万分の1レ

 ベル)が発生。あ

と、「0.1」とかの先頭の「0」は省略されるようだ。f(0.7)の値は、

0.08000005という意味で、「E-02」は「10の-2乗倍」を表す。本来の

正しい値は0.08だ。

 

いずれにせよ、x=0.7とx=0.8の間でf(x)の符号が+から-に変化する

から、f(x)=0の実解が1つあるのが分かる(2つではない)。近似解としては、

0.7でもいいし、0.72くらいでもいい。正確には(7-√17)/4だから、約

0.719。

 

 

         ☆          ☆          ☆

最後に、p.193の例26を少し変えた問題。関数g(x)=x²-ax(0≦x≦2)

最小値を大まかに探す問題。定義域を20等分して、一番小さい値と、それを 

与えるxを求める。aは後で入力

 

150112g

 

最小値MINは最初、0(x=0の時)からスタート。それを下回る関数値Yが出て

来たら、それを新たな最小値とする(IF~THEN~の構文)。最小値を与えるx 

の値Zも、0からスタートして更新していく。

 

150112h  実行して、a=2を代入

  ると、左の通り。最小値 

  は-1で、それを与える

  xは1と出た。

平方完成すると、g(x)=x²-2x=(x-1)²-1だから、それらは数学的に正確

な答となってる。

 

それは単に、私が問題の設定を調整したからであって、一般には、100等分で

も1000等分でも、近似的な解しか求まらない。ただし、近似の精度が高ければ、

十分に実用的な解となる。

 

それでは、今回はこの辺で。。☆彡

                                     (計 2434字)

 

 

cf. Quick BASICの練習(8)~素数の判別、エラトステネスのふるい

   Quick BASICの練習(9)~数列の二項間漸化式と固有値、一般項

 

                         (追記 71字 ; 合計 2505字)

| | コメント (0)

Quick BASICの練習(6)~DIM文と配列変数(添字つき変数)

時間も残り字数も少ない、年の瀬の週末。1ヶ月ぶりにプログラミングで簡単

な記事を書いて済ませようと思ったら、失敗してしまった。久々に、ソフトがフ

リーズ(異常停止)したし、練習問題の完全な解答もまだ出来てない。それで

も、「配列変数」その他、今までに出てない領域に踏み込んだのは確かだか

ら、クイック・ベーシックの6本目の記事としてアップしとこう。

 

これまでのプログラミング記事7本(2本+5本)は以下の通り。ほぼ完全に

知識ゼロ、ソフトも無い状態の初心者状態からスタート。必要なら過去記事

に戻って読むことをお勧めする。 

 

 

  初めてのプログラミング♪

              ~メモ帳でバッチファイル作成(コマンドプロンプト用)

  初めてのプログラミング(2)~計算その他、簡単なバッチファイル

 

    ・・・・・・・・・・・・・・・・・・・・

  Quick BASICのダウンロード、ダイレクトモード(Immediate)入力と計算

  Quick BASICの練習(2)~プログラム・モードでの入力&実行

  Quick BASICの練習(3)~REM 文、GOTO 文、IF 文、各種トラブル・・

  Quick BASICの練習(4)~IF文、FOR文、NEXT文とループ(繰返し)

  Quick BASICの練習(5)~二重ループ、流れ図(フローチャート)

 

 

テキストは高校数学の教科書、数研出版『数学A』1995年版)。教科書のま

まだと上手く行かないこともあるし、勉強にもならないので、マイナーチェンジ

や試行錯誤を繰り返すことになる。

 

 

           ☆          ☆          ☆

では、新しい要素の「配列変数」(array variable)。簡単に言うと、高校数学

以上で出て来る、添え字付きの変数のことだ。X₁、X₂とか、Anとか、右側に

0以上(または1以上)の整数を付けることで、グループ分けした変数。プロ

グラミングの場合、小さい添字の代わりにカッコを使って、X(2)、A(I)のよう

に表現する。

 

変数の数が少なければ、単にアルファベットを多用する方が簡単だけど、変

数が大量にある時に困るし、「k番目の変数」というような指定もできない。配

列変数を使うと、AさんとBさんの2回ずつの点数を、A₁、A₂、B₁、B₂と

表すことも出来るし、実用的なのだ。

 

では、教科書p.188の例を少し変えたプログラムから。

 

141220b

 

まず、Dimension(次元)の略語「DIM」を使って、配列変数A(0)~A(3)を

用意。一番大きな数のもの、つまりA(3)だけ書く。それぞれの値を2、4、6、

8と決めた後、似て非なるものとして、A0~A3も用意(それぞれ、1、3、5、7)。

こちらを先に、そのままプリント(表示)した後、FOR~NEXT構文で、配列変

数をプリントさせる。

 

141220a  実行(RUN)の結果は左の通り。下

  段がA(0)~A(3)で、これだけの事

  なら配列変数を使う意味は無い。た

  だ、書き方や扱いが違うわけだ。

 

 

           ☆          ☆          ☆

続いてp.189の例3。さいころを何度か投げて、1~6の目がそれぞれ何回

出たか、カウントするプログラム。メモ用紙に手書きした方が早いが、勉強の

ためだ。

 

141220c2 配列変数は

 X(1)~X(6)。

 出た目をAとし

 て入力、X(A)

 が1ずつ増えて

 行く。3が出れ

 ば、3の回数を

 示すX(3)が1

 増える。GOTO

文で第30行に戻って、次の目を入力。最後は0を入力して、IF~THEN構文

で第80行にジャンプ、さいころ投げ終了。各目の回数が表示される。

 

141220d  左は「3、5、5、2、4、4」と出たと仮定した

  場合。確かに、1は0回、2は1回、3は1回、

  4は2回、5は2回、6は0回と表示された。

 

  これを「X(1)は0、X(2)は1・・・」という表

  示にする方法は、まだ発見できてない。

  「PRINT ”X(I)”」とプログラミングすると、

  「X(I)」と表示されてしまうのだ。クリスマス

  後に再チャレンジの予定。

 

(☆追記: 各配列変数の初期値は、設定しなくても自動的に0となるらしい。)

 

 

            ☆          ☆          ☆

最後に、まだ苦戦中のp190、問9。ある集団の人達の年齢を入力して、年代

別に分けるプログラムを作れという問題だけど、自然数÷自然数の商を求める

関数が使えない環境なので(¥マークが使用不能)、不利な状況。37¥10=3

で30代とか出来ない。

 

とりあえず今日は、「20歳以上の成人と未成年者を分けてカウントするプログ

ラム」を書くだけで終わりにしとこう。

 

141220f3_4

 

 

配列変数は未成年者(0歳以上 AND 20歳未満)がX(0)、成人がX(1)。

REM文(説明書き)に続いて、第20行で「DIM X(1)」とだけ書いて設定。

2つの条件を「AND(かつ)」でつないだのは初めてだし、数Aの教科書には

見当たらない。「200」歳入力で終了。

 

141220e2  8、15、22、35、48と年齢を入力

  すると、「区分0は2人 区分1は

  3人」と出力される。これを「X(0)

  は」とか「未成年者は」などと表示

  させるのが、残された課題。色々

  と試してるとフリーズしたのだ。

 

  それでは今日はこの辺で ☆彡

 

 

cf. Quick BASICの練習(7)~関数値の計算、方程式の近似値

   Quick BASICの練習(8)~素数の判別、エラトステネスのふるい

   Quick BASICの練習(9)~数列の二項間漸化式と固有値、一般項

 

                          (追記 104字 ; 計 2151字)

| | コメント (0)

Quick BASICの練習(5)~二重ループ、流れ図(フローチャート)

またまた1ヶ月半の空白期間が経過してしまったが、代表的な初心者向け

プログラミングソフト・BASICの1つのヴァージョン、Quick BASIC(クイッ

ク・ベーシック)の練習を続けよう。雨の夜にはちょうどいい♪

 

これまで書いて来た6本の記事は以下の通り。ほぼ完全に知識ゼロ、ソフト

も無い状態の初心者状態からスタートしてる。必要なら、過去記事に戻って

読むことをお勧めする。 

 

 

  初めてのプログラミング♪

              ~メモ帳でバッチファイル作成(コマンドプロンプト用)

  初めてのプログラミング(2)~計算その他、簡単なバッチファイル

    ・・・・・・・・・・・・・・・・・・・・

  Quick BASICのダウンロード、ダイレクトモード(Immediate)入力と計算

  Quick BASICの練習(2)~プログラム・モードでの入力&実行

  Quick BASICの練習(3)~REM 文、GOTO 文、IF 文、各種トラブル・・

  Quick BASICの練習(4)~IF文、FOR文、NEXT文とループ(繰返し)

 

 

使用テキストは今まで同様、少し前の高校数学の教科書、数研出版『数学A』

1995年版)。教科書のままだと上手く行かないこともあるし、自分自身の勉

強にもならないので、マイナーチェンジや試行錯誤を繰り返すことになる。この

教科書を一通り終わらせるまで、あと記事3本くらいだろう。。

 

 

          ☆          ☆          ☆

まずは前回の復習も兼ねて、教科書p.181の問5から始めよう。n個の異な

るものからr個取り出して並べる順列(Permutation)の総数、nPrの計算。

ただし、nとrは後から数値を代入。また、「FOR ~ TO ~ STEP -1

の構文を用いてループ(繰返し)を作る。n×(n-1)×・・・×(n-r+1)の掛

け算を、左から、つまり大きい順に実行させるわけだ。

 

141125d まずnとrを入

 力させる形を作

 る。次に、順列

 nPrの初期値

 は1と設定して、

 nからn-r+1

 まで順に掛け合

 わせて行く。

 

141125e  実行して、指示に応じてnとrの値を5、3と代入す

  ると、確かに正しい答が表示(PRINT)された。

  5 P 3=5×4×3=60だ。

 

 

            ☆          ☆          ☆

続いて、新しい話の「二重ループ」を使う問題。FOR文とNEXT文で作るループ

(繰返し)を二重に使うことになる。普通の数学なら、大きく場合分けした中で、 

さらに小さく場合分けするようなものだ。「(1)その1,その2,・・・、(2)その1,

その2,・・・」といった感じ。

 

適当なアレンジを思い付かないので、ここでは教科書p.180の例20、掛け算 

の九九(くく)の表を作る問題を、ほぼそのまま使ってみよう。ただし、REM文

(注釈)を少し簡単にしたし、元の変数がなぜかKとJになってたからaとbへと

変更した。

 

141125f 1の段(横の列)

 は、a=1に対し

 て、b=1,2,

 ・・・,9を順に

 掛けて、Xとし

 て出力する。

 次にa=2,3,

 ・・・,9と変化

させる。まず、aで大きなループを作り、それぞれの中でbの小さなループを作る

から、入れ子状の二重ループとなる。

 

FORとNEXTで挟む部分の先頭は1マス空けて分かりやすくするから、中盤で

bを変化させる箇所では先頭が2マス空いてる。50行目は、1ケタの値を表示

141125g_2  する時、直前に半角スペー 

  スを入れて、表の縦の列を 

  揃えるためのもの。80行

  目は、1の段、2の段など

  の改行を入れるためのものだ。

実行すると、確かにキレイな表になる。

 

 

         ☆          ☆          ☆

すぐ下の問6では、30行目の右側の「b=1 TO 9」を「b=1 TO a」へと

141125h  修正したらどうなるか、と

  いう問題。

 

  予想通り、九九の表の

  右上が消えた三角形の表

になった。1の段が1×1まで、2の段が2×2までで終わるから、半分ちょっと

になるのだ。掛け算の交換法則を前提とするなら、九九の表は一応これで間

に合う。1の段から消えた1×2の代わりに、2の段の2×1を見ればいい。小

学2年生は喜ばないだろうが♪

 

141125k  なお、この九九の表のプログラ

  ムだと行の名前が100番まで

  到達する。3ケタは珍しいし10

  行目だから、うっかり10番と入

  力したら、「Duplicate label」

(重複ラベル)というエラー表示が出た。このくらい、自動で修正してくれても

いいと思うのは、人間のワガママか♪

 

 

           ☆          ☆          ☆

続いて、流れ図(フローチャート)の書き方。これはそもそも、プログラムと違っ

人間用のものだから、流れの筋道がある程度わかればいいはずだ。少し自

由度が大きいし、プログラムとの1対1の対応関係がある訳ではない。おまけ

に技術や特殊なソフトを持ってない私の場合、ノートに手書きすることになる。

 

141125i  まず、今回の最初のプログラム

  で、順列nPrを求める流れ図か

  ら。本来は流れ図を先に書い

  て、それを参照しながらプログ 

  ラミングするのだが、初体験の

  私の場合、プログラムを見な

  がら流れ図を書いた♪

 

  世界に通じる図を意識して、

  日本語なしで書いてみたが、

  教科書では日本語を使って

  る(他の問題)。赤字は単な

  る記事用の補足説明。

 

  はじめと終わりは、両端が 

丸い長方形みたいな枠。キーボード入力は台形の枠。コンピューター処理は

普通の長方形。条件判断は菱(ひし)形で、YESNOで2つの道に分岐する。

図を見ると、「ループ」(輪)という用語の意味が一目瞭然だろう。モニター(画

面)への表示はなぜか、左向きの弾丸の形の枠組となってる。左向きの矢印

は、変数記号への代入を表す。

 

 

           ☆          ☆          ☆    

141125j  最後は、九九の表を作る流れ図。

  ここでは、半角スペースを入れる

  処理(図ではSPACE)と、改行

  処理(LINE FEED)を使うことに

  なる。「二重ループ」という用語の

  意味も一目瞭然だ。

 

  それにしても、やはりプログラム

  より流れ図の方が面倒だと感じ

  てしまう♪ 流れ図というものは、

  もっと大まかにザックリ書かない

  と実用性がないような気がする。

  それとも、慣れの問題だろうか。

 

  ともあれ、今日はこの辺で。。☆彡

 

 

 

cf. Quick BASICの練習(6)~DIM文と配列変数(添字つき変数)

   Quick BASICの練習(7)~関数値の計算、方程式の近似値

   Quick BASICの練習(8)~素数の判別、エラトステネスのふるい

   Quick BASICの練習(9)~数列の二項間漸化式と固有値、一般項

 

                                    (計 2547字)                             

| | コメント (2)

Quick BASICの練習(4)~IF 文、FOR 文、NEXT 文とループ(繰り返し)

また、あっと言う間に1ヶ月半の空白期間が経過してしまったが、代表的な

初心者向けソフト・BASICの1つのヴァージョン、Quick BASIC(クイック・

ベーシック)の練習を続けよう。

 

これまで書いて来た5本の記事は以下の通り。ほぼ完全に知識ゼロ、ソフト

も無い状態の初心者状態からスタートしてる。必要なら、過去記事に戻って

読むことをお勧めする。 

 

  初めてのプログラミング♪

              ~メモ帳でバッチファイル作成(コマンドプロンプト用)

  初めてのプログラミング(2)~計算その他、簡単なバッチファイル

  Quick BASICのダウンロード、ダイレクトモード(Immediate)入力と計算

  Quick BASICの練習(2)~プログラム・モードでの入力&実行

  Quick BASICの練習(3)~REM 文、GOTO 文、IF 文、各種トラブル・・

 

 

          ☆          ☆          ☆

前回のトラブルで、消えてしまった昔のファイルはそのままになってるが、ソフ

ト自体は発見できた。今回の使用でも、別に問題は無かったから、壊れてない

感じだ。

 

ただし、ファイルの保存作業がおかしくなって、保存と再利用(「開く」)は出来

るのに、なぜかPC内で発見できない。普通のエクスプローラーの設定をどう

変えても、ファイルが表示されないままになってる。 まあ、あまり気にしないこ

とにしよう。

 

使用テキストは今まで同様、少し前の高校数学の教科書、数研出版『数学A』

1995年版)。教科書の記述のままだと上手く行かないこともあるし、自分自

身の勉強にもあまりならないので、マイナーチェンジや試行錯誤を繰り返すこ

とになる。

 

念のために注意しとくと、やはり特殊な世界で、何が起こるか予想できない

ので、、PC内のデータのバックアップは行っておく必要があると思う。その辺

り、リスク・テイクやリスク管理はあくまで自己責任ということで、悪しからず

ご了承を。ちなみに私はこれまで、このベーシックの保存ファイルが消えた

だけで、他の実害は残ってない。

 

 

           ☆          ☆          ☆

では、前回の続きということで、再び教科書p.177~の「条件判断」、「IF文

から。「IF ~ THEN ・・・」という構文で、条件(~)つきの動作(・・・)をプロ

グラミングする話だ。「もし~なら、その時は・・・」ということ。これを使えば、前

回生じたような暴走トラブルも防げる。

 

141012a2 最初の問題はp.178

 の練習21。前ページ

 の例(1~50の自然数

 の表示)を修正して、

 1~99の奇数を表示

 させるプログラムを作

 成する。

 

最初の第10行は、コンピューターにとっては不要だけど、人間にとって分か

りやすくするための、REM文。リマーク(remark:注釈)として、「1,3,5,,,」

を表示させると宣言してるわけだ。第20行の「N=-1」からスタートして、第30

行の「N=N+2」という特殊な式で、今までのNに2を加えて新たなNとする操

作を指示。第40行で、Nを表示。ただし、2を足した後のNだから、最初に表示

されるのは-1ではなく、1になる。

 

そして、問題のIF文が第50行、「IF N<=97 THEN 30」。もしNが97以

下なら第30行に戻って繰り返せ、と命令する条件つき命令文だ。「以下」の記

141012b  号は、「<=」か「=<」。つまり、不

  等号と等号の連続で表す。教科書

  の例に素直に従うなら、「N<99」

  と書く所だけど、勉強のためにあえ

  て、「N<=97」と変更。「THEN」

  の次に書くべき「GOTO」は省略

  可能だから、書いてない。

 

  実は最初、40行の右端に「;」を

  入れ忘れてたので、実行すると、

  画面では55から99まで縦に表

  示された。53以下は見えない。

画面が小さくて、大きくできないようになってるし、スクロールやカーソル移動

もできないのだ。どんなキーを押しても、元のプログラムの画面に戻るだけ。

 

141012b2 40行を修正す

 ると、左のよう

 に縦横に数字が

 並んだ(右側は

省略)。横の並びが長過ぎるから、適当な長さで折り返したいけど、まだその

方法は不明。次回、扱う予定の「2重ループ」というものを使うしかないのか。。

 

 

          ☆          ☆          ☆

続いて、練習22。あらかじめ用意されてる「組み込み関数」の1つ、絶対値計

算関数ABS(X)を使わずに、a-bの絶対値を計算するプログラムの作成。

ちなみに「絶対値」は英語で「absolute value」だから、先頭の3文字を取っ

て「ABS」などと略す。

 

教科書で直前に書かれた例17(a、b、cを3辺とする三角形が存在するかど

うかの判定)を参考にブログラミングすると、計算は上手く出来たけど、結果

の黒い画面から元の画面に戻れなくなってしまった。いつまでも入力を要求

されてしまったので、仕方なくソフトを終了して再起動。   

141012c2 修正したのが、次

 のプログラムで、

 これは上手く行っ

 た。前のものは、

 60と80が「GO

 TO 20」となっ

 てたから、無限に

 aとbの値の入力

を要求されてしまったのだ。

 

141012d2  実行結果は、左の通り。

    (絶対値5-3)=2

    (絶対値1-7)=6

  確かに正しい絶対値計算が2種類、

  表示されてる。ただし、1回計算する

  ごとに元のプログラムの画面に戻って

再スタートすることになる。

 

 

            ☆          ☆          ☆

続いて、新しい話に向かおう。教科書p.179からの「FOR 文」と「NEXT 文」。

これまでは IF 文を使って、繰返し部分(「ループ」)を書いてたが、他の書き方、

他の繰り返し処理も勉強しようという話だ。慣れれば、FOR 文とNEXT 文を使

うと便利で分かりやすいのかも知れない。

 

教科書ではまず、1~99の奇数の2乗の和を例にしてるから、ここでは2~8 

の偶数の2乗の和で考えてみよう。つまり、2²+4²+6²+8²の計算で、答は

120になるはず。

 

141012e  先に、今までのIF 文で

  書いてみる。偶数Nと和

  S、2つの変数が少しず

  つ変化していくから、や

  や分かりにくい。

 

  要するに、S=0、N=2、

S=2²=4、N=4、S=4+4²=20、N=6、S=20+6²=56、N=8、

141012f  S=56+8²=120、と計算して、次のNは10

  だから無視して終了。答は単に、S=120と出

  力するわけだ。ソフト的には一応、Nは10

まで変化させてるはずだけど、出力(プリント)はSのみだから、関係ない。

ちなみに「S」は、「和」を表す英語「sum」の頭文字。

 

 

           ☆          ☆          ☆    

141012g2 一方、「FOR 文」と

 「NEXT 文」を使うと

 左のようになる。

 まず20行目。「FOR

  TO 」の形で、「2

  から8まで2ずつ増える

変数Nに対して」計算することを指定。30行目で和SにN²を加えて、40行目

で「NEXT N」、つまり「次のN」に進んでSを計算し直すことになる。この場

合、ループ(繰返し)する計算箇所は30行目だから、そこだけ1マス右側に 

下げて書くと分かりやすいという話だ。

 

その1マス下げる書き方を使って、最後に教科書の例18、自然数Nの階乗 

N!を求めるプログラムを書いとこう。教科書では、N(エヌ)の小文字と大文

字が混在してるので、ここでは大文字に統一する。他にも、勉強のために、

教科書とは色々と変えてある。第10行の注釈文、20行と30行の入れ替え、

入力の仕方、文字。

 

141012h2  N!=1×2×・・・×Nだから、

  掛け算、つまり積を求める計

  算になる。「積」は英語で

  「product」だから、頭文字P

  で表してある。要するに、1に

  2を掛けて、3を掛けて、4を

  掛けて・・・という単純な掛け算

の繰返しを続けて、積をN!まで変化させてるわけだ。

 

FOR 文とNEXT 文に挟まれた第50行だけ、先頭を1マス右側に下げて

ある。ループが1行だけの簡単なプログラムだと、あまり意味はないけど、

141012i  ループが複数行とか複数回ある複雑なプロ

  グラムなら分かりやすいだろう。実行画面

  で、要求に従ってN=4を代入すると、

4!=1×2×3×4だから、4!=24と表示される。

 

なお、今週は計19104字となった。それでは、今回はこの辺で。。☆彡

 

 

 

cf. Quick BASICの練習(5)~二重ループ、流れ図(フローチャート)

   Quick BASICの練習(6)~DIM文と配列変数(添字つき変数)

   Quick BASICの練習(7)~関数値の計算、方程式の近似値

   Quick BASICの練習(8)~素数の判別、エラトステネスのふるい

   Quick BASICの練習(9)~数列の二項間漸化式と固有値、一般項 

 

                                     (計 3391字)

| | コメント (0)