超初心者によるC言語入門3~情報系学科の大学生が1年生向けに作った学習アプリ『Study-C』で復習

また、ずいぶん時間が空いてしまった (^^ゞ 1本目の記事を書いたのが、20年10月24日。2本目の記事は21年1月12日。それからの9ヶ月間、C言語も含めて、プログラミングにはほとんど触れてない。先月、数学の未解決問題「コラッツ予想」の記事を書いた時、BASICにちょっとだけ触れた程度。

    

どうも、イップスというか、身体と心が固まって動かなくなってしまうのだ。数学や文系の話なら、難しくても拒否反応はあんまし無いから、やっぱりプログラミング独特の性質が壁になってる。

   

今回、久々に高校の情報の教科書を開いたものの、無味乾燥でシンプルな記述を読む気がしなかったので、App Storeを拝見。「C言語」で検索すると、トップに表示されたのが、「Study-C」という学習サポートアプリ。iOS専用なのか、AndroidスマホでPlay Storeを探すと出て来なかった。

      

211016a

   

サイズも軽くて、評価も高いけど、これは確か去年、インストールしてすぐ使わなくなった覚えがある。別のサイトのpaizaを実行環境にすることを勧めてたから、そっちに移って、このアプリは放置プレイになってた。

   

今日、あらためて最初からマジメに見て行くと、なかなか親切でフレンドリーで読みやすい(個人の感想♪)。大学院生が作ったのかな・・と思ってたら、情報系の学科の大学生だった(2年前?の当初は)。しかも、同じ情報系の大学1年生をターゲットにしてるとのこと。

       

単なる超初心者にはどうかと思ったけど、今のところは大丈夫。このまま一気にラストまで行きたいけど、今まで続いた試しはない♪ 高校の教科書もまだ序盤だし、昔、別の教科書でBASICをやってた時も、惜しい所で挫折してしまった。教科書が行方不明になったのだ♪ まあ、その程度の扱いということか。。

  

  

     ☆     ☆     ☆

211016b

  

上が最初の目次の画面。はじめに、始めよう!C言語、C言語ドリル、コラム。まん中の2章が中心的内容。ただ、超初心者にとっては、下のような実行環境の話に好感を抱いた。

       

211016c

    

プログラムの実行環境を作る、環境構築が、わかりづらく面倒臭い。まさに、その通り! あるあるで、私も何度も書いて来た。他の言語でも、そのスタート地点でいきなり躓いて来た。しかし、この製作者が挫折したのは中学生の時。さすがに早い。私だと、数学と将棋とテレビアニメにハマってた頃か。ランニングもたまに1人でやってた。

    

ちなみに、この製作者が勧めてた環境は、EasyIDEC。検索するとメジャーらしいけど、逆に批判の言葉もあちこちに出て来た。今でも更新し続けてるみたいだし、いずれ使ってみようと思う。最初の紹介を読んだ限りだと、ちょっとクセがあるようだ。まあ、マニアック・ブロガーの私が言うのも何だけど♪

   

    

      ☆     ☆     ☆

211016d

   

で、第2章(または第2部)の、始めよう!C言語。最初はおなじみの「Hello World!」。キー入力ではなく、単なる並べ替え問題なのに、いきなり私は失敗。コンパイラ・エラーが表示されてしまった。

        

211016e

    

Hello Worldをくるむ二重引用符の中に「\n」を入れるのに、右外に出してしまったのだ。ホント、コンピューターは融通が利かないね♪ そもそも、この改行の \n。意味も必要性も分かりにくいし(特に最後の\n)、逆スラッシュが入力できないこともあるのでイラついてしまう。

          

211016f

   

言い訳やボヤキはともかく、やり直して、「正解です!!」。アプリは教科書と違って、正解だと言ってくれるから嬉しい。誉め言葉が付いてると、もっと嬉しくなる♪ 大人になると、褒められる機会が滅多にないもんで。

   

   

     ☆     ☆     ☆ 

続いて、足し算の答を表示するプログラム。まだまだ、完全な復習の話に過ぎないけど、完全に忘れてる♪ ちなみに冒頭の「printf.c」というのは、C言語で書いた、printf(表示機能)のソースプログラムという意味らしい。

   

と言っても、ソースプログラムというものがまたモヤモヤしてしまうけど。以下のプログラム画面を表示するためのプログラムという意味かな? C++(シー・プラプラ)のものだと、右端の拡張子の部分にppが付いて、printf.cpp とかになるようだ。

    

211016g

    

この「%d」も好きになれないし、記述子とか、フォーマット指定子という特殊な用語も苦手 (^^ゞ それならむしろ、英単語の decimal (10進数)の方がスッと受け入れられる。

       

211016h

   

printf("%d,%d\n", 3+4, 5);  このプログラムの実行結果を答えよ。これは、7,5 だろう。直感的に♪ いや、本のアイコンを押すと、解説に戻ることも可能。

    

211016i

  

Hello\n と改行して、printf("World!!\n"); と下に書き足すと、HelloとWorldが2行で表示されると。ちゃんと6行目に、「//最後に\nを付けてね」とヒントを挿入してくれてる♪

    

211016j

    

  

     ☆     ☆     ☆

そして、いよいよ変数の登場。

    

211016k

   

整数型のaという名前の変数を宣言せよ。定義とか導入ではなく、宣言ね♪ 選択パネルが下にあるから、int a; と並べ替えるだけ。その下の a=1; は働かず。int は、整数を表す英単語 integer の略語。日本語で「整」と入力するプログラミング言語は無いのかね?

       

211016l

   

画面に4と表示させるプログラムを完成させよ。 int a; の次の6行目に、a=4; と入力するだけ。この右端にいちいち付けるセミコロンも、省略するプログラムは無いのかね?

       

211016m

  

上は、変数の宣言と、数値の代入を同時に4つ行ったプログラム。a=1, b=2, c=3, dの4つを導入して、さらに result (計算結果)も宣言。最後に、d=b; と定義・・ではなく代入して、result = a + b + c + d; の表示。1+2+3+2 だから result=8と表示される。

   

一応、上のプログラムだけ、paizaで自分で入力。確かに正しく出力された。

  

211016o

   

   

      ☆     ☆     ☆

211016n

   

早くも最後に、いきなり整数の計算式で、result = 6/2*(1+2) 。これはウチでも前に記事にした気がする、有名問題。6÷2(1+2)=6÷6=1と答えるのが、典型的な誤答だけど、式そのものがおかしいという異論もある。6÷2(1+2) という式の書き方は見ないから。

     

このプログラムでは、アスタリスクを入れて 2*(1+2) としてあるから、6÷2×(1+2) という計算。答(出力結果)は9。

   

あぁ、こんな初歩的レベルでもう時間切れになってしまった (^^ゞ 次はもう来年か♪ いや、今月中にまたプログラミング記事を書きたいと思う。こんな所で手間取ってるようでは時代に取り残されてしまうのだ。ではまた。。☆彡

     

       (計 2706字)

| | | コメント (0)

未解決問題「コラッツ予想」と確認用プログラミング(BASIC)~2011センター試験・数学ⅡB

たまに忘れた頃にプログラミング記事を書こうとすると、いつも最初の入口で引っかかる。コード入力して実行する、環境を作れないのだ。

          

今回だと、(少し前の?)高校数学で使われてた言語、BASIC(ベーシック)を使う環境がなかなか見つからない。今さら古過ぎるということか? 1つ前のPCにはインストールしてたけど、今のPCに新たにインストールするのも面倒。

   

そこで最初に試したのが、iOSアプリの Learn BASIC Programming。スイスイ使えていいと思ってたら、「ある数を超えない最大の整数」を表す INT 関数が使えないようで(?)、エラー表示が出る。解決策も発見できず。

     

次に試したのが、パソコンのブラウザで使えるはずのウェブ上のサービス、Quite BASIC。これはなぜか、コードの1行目の「INPUT N」が読めないとか言って来た。

    

これだけでもう、大量の時間とエネルギーを使い果たしたので、とりあえず自分でプログラムを書いて実行するのは断念。与えられたコードの画像を利用するだけにしよう。

☆追記: 翌朝、PCに十進BASICをインストールして成功。この記事の末尾にプログラムの画像を挿入した。)

   

   

     ☆     ☆     ☆

今回の記事のキッカケは、ネットで見かけた数学の懸賞金問題。1937年に数学者コラッツが提示した「コラッツ予想」(Collatz conjecture)に、日本のベンチャー企業から1億2000万円の懸賞金がかけられたとのこと。下の写真は英語版ウィキペディアより

  

210910b

     

それは7月の話だが、昨日は別の「ブレイクスルー賞」で、日本人2人がそれぞれ賞金300万ドル(3億3000万円)を獲得したニュースが流れてた。数学部門では、京都大学の望月拓郎教授(ABC予想関連の望月氏とは別人)。

   

望月拓郎氏の研究内容は、少しだけ調べてみた所だと、意味不明な言葉・概念が並んでいて、残念ながら全く理解不能。

   

それに対して、コラッツ予想は小学3年生くらいでも分かるし、計算実験で楽しめるはず。

   

 「どんな正の整数でも、偶数なら2で割る、奇数なら3倍して1を足す、という操作を繰り返せば、必ず1に到達するだろう。

   

  

     ☆     ☆     ☆

実際に試してみると、意外なほど長いプロセスになることもある。例えば、7なら、7→22→11→34→17→52→26→13→40→20→10→5→16→8→4→2→1。操作数は16回。

  

英語版ウィキペディアによると、2020年頃の段階では、10の20乗を超える所までコンピューター計算で確認されてるらしい。

     

ちょっと似た話なら、何度か聞いた気がする。例えば、6年前の人気ドラマ『デート』第9話では、「どんな数字も各位の2乗を足すと1か89になる」というコネタが挿入されてた

     

直感的には、コラッツ予想は簡単に示せそうな気もするが、提示から84年も経つのに未解決。ただ、ネットのあちこちに、センター試験に出題されたという情報があったので、すぐ問題ファイルを手に入れて解いてみた。

  

それが数学ⅡBの選択問題で、プログラミング関連。私が見た範囲では、どのサイトも、プログラミングの部分を飛ばして最初の導入だけ紹介してたので、ここでは本題のプログラミングも扱う。

    

   

     ☆     ☆     ☆

それでは、2011年のセンター試験問題を見てみよう。「日本の学校」HPよりダウンロードさせて頂いた

  

210910a

   

210910c

    

まず、簡単な(1)を解いてみる。

  

 6→3→10→5→16→8→4→2→1

 ∴ F(6)=(6から始めて1が得られるまでの操作回数)=8 ・・・アの答

  

 11→34→17→52→26→13→40→20→10→5→16→8→4→2→1

 ∴ F(11)=(11から始めて1が得られるまでの操作回数)=14 ・・・イの答

   

   

     ☆     ☆     ☆

この先は、環境作りの失敗で時間も無くなったので、穴埋めや選択肢を飛ばして、直ちに正解のプログラムを見てみよう。

   

210910e

210910d

  

     ☆     ☆     ☆

まず、最初の100番の行で、調べる自然数Nをインプット。問題(1)なら、6とか11。

   

次に110行で、Iという変数を用意して、最初はNの値をそのまま代入。操作が進むと、Iは変化していく。

  

一方、120行で、Cという変数(回数のカウント用)も用意して、最初は0を代入。1回の操作ごとに、+1で回数を増やしていく。

  

130行からが実質的な操作。まず、I=1なら、直ちに210行まで飛んで、F(1)=1と表示。

  

140行と150行は、もし「Iが偶数」なら2で割ったものをIとする、という条件を、「INT(I/2)×2=I」と書いてる。

  

これは、Iが奇数だと成り立たない。例えばI=3の時、INT(3/2)×2=1×2=2になって、条件を満たさず、180行に進むことになる。

  

160行は、1回の操作ごとに、回数Cに1を加える操作。170行は、「もし」という条件の終了。

  

180行は、1でもないし偶数でもない奇数Iに対して、3倍して1を加える操作。

  

190行で、回数1を加えた後、200行で130行までバックする。I=1になったら終了。

  

210行で、結果の表示。F(N)=C。NとCはここまでに登場した変数の値で、他は単なるアルファベットの文字とカッコの記号。

  

220行で、すべて終了。

   

   

     ☆     ☆     ☆

さらに、ある自然数M以下の自然数Nのうち、F(N)≦10となるすべてのNについて、F(N)の値を出力するプログラムへと書き換える。

   

最初と最後の辺りだけ少し変更して(下の青枠)、次のコードが正解。101行のFOR TO文で、N=1からMまでの実行を宣言。211行のNEXT Nで、次の数Nの操作へと進んで行く。PRINT(表示)は、C≦10の時だけ(210行)。

         

210910f

210911g2

   

これによって、次の8行が表示される(はず)。改行は省略。

 F(1)=0 F(2)=1 F(3)=7 F(4)=2 F(5)=5 F(6)=8 F(8)=3 F(10)=6

  

よって、210行の PRINT文が実行される回数は8 ・・・サの答

  

後で実際にプログラミングしてみる予定。とりあえず今日のところはこの辺で。。☆彡

  

  

P.S. 翌朝、2つとも自分で書いて、実行。この問題の説明通りに表示された。

   

210910h

  

210910i

    

      (計 2512字)

| | | コメント (0)

大学入学共通テスト2025年「情報」サンプル問題・第2問の解説~比例代表制選挙の当選者決定プログラム

朝日新聞の21年3月25日・朝刊に、令和7年度(2025年)大学入学共通テスト新科目の解説やサンプル問題例などが載ってた。

   

全体が長過ぎるので、とりあえず「情報」(必修科目・情報Ⅰの範囲)の問題だけ読むと、適度な難しさと量で第2問(抜粋)だけだったし、身近な選挙の話だから、ブログ記事を書くことを決定。

  

ところが、大学入試センターでも確認すると、朝日には無かった第2問の後半が載ってて難しく感じてしまった。私は情報Ⅰの科目内容を知らないから当たり前かも知れないが、これを数十万人の受験生(大部分は高校3年生)が短い時間で解答できるのか?

     

数年前の新テストのサンプルでもあったことだけど、本物の試験までにはレベルが下げられるだろうし、説明ももう少し丁寧になると思う。とにかく問題と解き方を見てみよう。単なる紹介や解説だけでなく、個人的な感想・意見も加える。問題文は長過ぎるので、コピペさせて頂いた。

    

  

     ☆     ☆     ☆

210331a-t

  

210331b-t

    

   

比例代表式選挙の獲得議席は、得票数に正確に比例させることは(ほとんど)出来ない。ごく簡単な例だと、議席数1の選挙区で、A党が3票、B党が2票だった時、正確に比例させると、0.6議席と0.4議席になってしまう。

  

実際の選挙だと、議席数は0以上の整数でなければならないので、正確な比例ではなく、大まかな比例を目指す方式が必要になる。日本では基本的にドント方式。私は昔、簡単な説明を読んだ気がするけど、完全に忘れてた。

  

問題の「基準得票数」とは、1議席が何票分かというより、何票で1議席とれるかと考えた方が分かりやすいと思う。合計3480票で6議席だから、580票で1議席とれる。この580が、下のプログラムでは kizyunsuu (基準数)と書かれてる。

      

配列 Tomei [i] は、i番目の党名の列。それぞれの要素は、例えば Tomei [0] ならA党。Tomei [1] ならB党。

  

配列 Tokuhyo [i] は、i番目の得票数の列。例えば Tokuhyo [2] なら、2番目のC党の得票数。ここでは、1440。

     

    

     ☆     ☆     ☆

210331c

   

sousuu という変数は、「得票数の総数」を表す。上のプログラムだと、(03)(05)(06)に従って、初期値0に4つの党の得票数を1つずつ足して行くことで求めてる。

  

1本の数式にまとめると、最終的に4つとも足し終えた後では、

sousuu=0+1200+660+1440+180=3480

    

giseki (議席)は選挙区ごとに決まった定数で、ここでは。他の選挙区では他の数値をとり得る。

  

よって、 kizyunsuu (基準数)= sousuu / giseki = 3480/6=580

  

後は、各党ごとに表示して行けば、下の枠内のようにモニター表示される。

  

  

     ☆     ☆     ☆   

210331d-t

    

  

単純な比例配分だと、それぞれの獲得議席数は無限小数になる可能性が高いし、小数点以下の切り上げ、四捨五入、切り捨て、いずれも(あまり)上手く行かない。そこで、先生が登場。

   

     

210331e-t

   

210331f-t

    

  

配列 Hikaku [i] は、獲得議席を1つずつ決める時に比較する数字の列。最初はどのi(つまり、どの党)でも、得票数そのものだが、1議席とると2で割り、2議席とると3で割る。どんどん小さくなるので、他の党にも議席獲得のチャンスが広がる。

  

配列 Tosen [i] は、i番目の党の当選数(=獲得議席数)。4党の合計が6になるまで、1回の比較ごとに、どれかが1ずつ増えていく。例えば、今回の比較ではD党が最大だから、D党の Tosen [3] が1増えるとか。

   

    

     ☆     ☆     ☆

210331g-t

   

210331h-a-t

    

  

最初、 Tosen (当選数)が0,0,0,0の状態からスタート。1回目の比較では、Hikaku [2] (つまりC党の数)が最大。よって、maxi(最大値を与えるi、つまり党番号)は2。よって、C党の当選数を表すTosen [2] が1増えて、Tosen には0,0,1,0と並ぶ。

   

2回目の比較では、C党だけ2で割った票数になって、Hikaku は1200,660,720,180と並ぶ。Hikaku [0] (つまりA党の数)が最大だから、maxiは0。よって、A党の当選数を表す Tosen [0] が1増えて、Tosen には1,0,1,0と並ぶ。以下、同様。

  

朝日新聞はこの問2までしか掲載してなかった。次の問3が私には難しくて、解きにくかったのだ。

     

   

     ☆     ☆     ☆

210331i-t

   

210331j-a-t

  

  

tosenkei は、その時点での当選者の合計。初期値0からスタートして、1ずつ増えて、議席数6に到達したら終了。つまり、tosenkei がgiseki (議席)6より小さい間は、比較して当選者を決めていく操作が繰り返される。

   

私はここまではすぐ理解できたけど、プログラムの(09)~(13)がなかなか分からなかった。「max」という新たな変数と、前に出て来てた「maxi」との違いがピンと来なかったし、そもそも何を繰り返し行ってるのかも分からない。

  

しばらく考えて、各回ごとに比較する4つの数字の中で最大の数値(max)を少しずつ探す作業だと分かった。まず、maxの初期値0からスタート。0< Hikaku [0] (つまり0<1200) だから、max=Hikaku [0]=1200。maxi は0(A党の党番号)。

  

次に、1200< Hikaku [1](つまり1200<660)ではないから、max も maxi も変化せず。さらに、1200< Hikaku [2] (つまり1200<1440)だから、max = Hikaku [2]=1440。maxi は2に変化。最後は、maxi は2のまま。

  

だから、プログラム(14)によって、Tosen [maxi](つまり Tosen [2]) は1増える。tosenkei(当選者数の合計)も1増加。

   

そして、Hikaku [maki] (つまり Hikaku [2])は、Tokuhyo [maxi] / (Tosen [maxi] +1)へと減少。つまり、Tokuhyo [2] / (Tosen [2] +1)へと減少。要するに、1人当選したC党の票数を1+1(つまり2)で割ってる。小数点以下は「切り捨て」関数で捨てる。

   

   

210331k-t

  

210331l-a-t

     

210331mthumb

   

  

最後は、各党の候補者数が足りなくなった場合への細かい配慮で一通りの完成。各回の比較で、最大値を探す時、候補者数が足りてる党の数値だけをチェックする。

  

普通に考えるなら、 (その党の候補者数)>(その時点のその党の当選者数) 。

不等号の使い方を少し変えると、 (その党の候補者数)≧(その時点のその党の当選者数)+1

  

候補者数の配列 Koho を追加で導入して、

 Koho [i] >= Tosen [i] +1

  

上の式をプログラムの(11)行に「and」で付加すればよい。最後の設問の選択肢では、≧ と< を混ぜてるから、受験生は迷ったり間違えたりする可能性が高い。まあ、最後を難しくするのはありがちな問題作成だし、OKだろう。

  

  

     ☆     ☆     ☆

これで、残る問題点は、そもそも議席数に対して立候補者数の合計が足りない時だけだろうか? 他にも何か細かいバグ(欠陥)がこのプログラムに含まれてるのかも。

    

この問題を自分で考えてる時、すぐに、比較する数値が同じになったら番号が小さい党が有利で不公平だと思ったけど、問題の一番最後にちゃんと説明してあった。

   

プログラムとの関連は分からないけど、選挙の最後にくじ引きの抽選を行ったというニュースは見覚えがある。そもそも選挙などやらずに、単なるくじ引きでいいという政治思想もあるくらいだから、許容範囲だろう。

  

運も実力の内。天の声、天命。というわけで、今日の天命(テンメイ)のブログ記事は終了♪ ではまた。。☆彡

   

      (計 3090字)

| | | コメント (0)

超初心者によるC言語入門2~答のケタ数指定、ルート(平方根)、三角関数、二次方程式の解の公式

フーッ。。 約3ヶ月ぶり、まだ2回目の超初心者は、準備だけでもう疲れ切った (^^ゞ ちなみに前回の記事はこちら。

  

 超初心者によるC言語入門、無料のオンライン・コンパイラ探しが困難、paiza(パイザ)がいいかも♪

  

まず、教科書『新情報技術基礎』(コロナ社)が見当たらない。って言うか、よりによって「コロナ」社か・・(^^ゞ 続いて、プログラミングするための環境作りでまた時間を取られてしまった。

  

前回、ネットのオンライン授業サイトPaiza(パイザ)を使ったのは何となく覚えてたけど、タブレットでまたC言語のアプリを探してみたのだ。1つ、良さげなのがあったからインストールしたら、環境はPaizaその他を使えとのこと(笑)。先に言って欲しいね。

  

で、Paizaラーニングにアクセスしても、全く覚えてないから、前回の自分のブログ記事で復習。勉強になる良い記事♪ マジメな話、普通のサイトや本に書いてない事まで書いてるから、私自身にとってはツボだった。とにかく、ここまでで1時間以上かかってしまった。。

   

   

     ☆     ☆     ☆

忘れてるから、ちょっとバックして、やり直そう。5章、C言語によるプログラミング3節、式と計算

  

問3半径が10の円の円周の長さを計算し、出力するプログラムを作成しなさい。(p.126)

   

円周率3.14が小数だから、等号(=)の右に書く「変換指定子」は、%f。数値の入力は、無理やり小数の形にして、2.0×3.14×10.0。いわゆる、2πr(ニ・パイ・アール)。

     

210112a2

       

何回、エンターキーを押してもダメ。そうそう。モニターの右側に隠れるように「コードの入力」ボタンがあるのを忘れてた。

  

210112l2

   

210112b

   

成功。既に1回、行の最後のセミコロンを忘れてエラー表示が出てしまった (^^ゞ 面倒くさっ。。 等号の記号は全角で入力してもいいのか。

  

あと、「return0;」は消しても大丈夫。さらに、10.0じゃなくて、整数10の入力でも大丈夫だった。2.0と3.14が小数だからかね?

  

小数点以下の00000もジャマだけど、深く考えないことにして先に進もうか。あっ!、小難しい説明があった♪ 例えば、変換指定子を「%5.2f」とすると、全体で5ケタ(小数点も1ケタと計算)になって、小数点以下が2ケタになると。確かに、実行すると、「62.80」と出力された♪

   

210112c2    

    

     ☆     ☆     ☆

続いて、例題5.4底辺の長さ4、高さ3の直角三角形の斜辺の長さを計算して出力するプログラム

   

3×3+4×4のルート(√)の計算だけど、結果はピッタシ5だから、無理数にはならないと。

     

ルート計算(平方根:square root)の関数「sqrt()」を使いたいから、上側に「#include <math.h>を挿入する必要がある。こんなの、省略できないのかね?

  

210112d 

     

210112e

   

教科書は結果のケタ数を指定してないけど、私は「%3.1f」として、全体3ケタ、小数点以下1ケタに設定。ちゃんと5.0が出力された。しかし、これも自動で判断してやってくれないかね?(^^ゞ

   

   

     ☆     ☆     ☆

次は三角関数。例題5.5sin30°、cos30°、tan30°を計算して出力するプログラム

    

sin()、cos()、tan()を使用。普通の度数表示の角30°を、高校数学用のラジアン表示の角に直して計算するから、角度の30に3.14を掛けて180で割る。いわゆる、π/180(180分のパイ)。

  

結果の数字は、全体5ケタ、小数点以下3ケタに指定するために、「%5.3f」と入力。

   

210112g

   

210112h

  

答えは合ってるけど、なぜか5行目に「コンパイル・エラー」の警告マークが付いてしまった。無料使用だから、エンジニアへの質問はできない♪ 教科書のままの入力なんだけど、なぜ?

  

210112i

  

5行目のスペースの入力が2ヶ所おかしいってこと? 私が全角スペースを入れたとかいうことかね? あっ、半角スペースに変えたら警告が消えた! 全角スペースは良くないのか。一応、結果は出力されるけど?  

    

   

     ☆     ☆     ☆

早くも最後は、二次方程式の解。問5x²+4x+3=0の解を公式で求めて

 解1=-1.000000

 解2=-3.000000

と出力するプログラム

   

二次方程式の解の公式の複合±を、+と-の2つに分離。解1はプラスで、{-b+√(b²-4ac)}/2a。解2はマイナスで、{-b-√(b²-4ac)}/2aとすると。

   

210112j

   

210112k

  

結果は全体8ケタ、小数点以下6ケタに設定。なぜか教科書は、ケタ数設定なしになってた。答を改行で2段にするから、変換指定子%8.6fの直後に、改行の記号「\n」を入れると。

    

本当は「¥n」だけど、なぜか円マークじゃなくて逆スラッシュになる。これは気にしなくていいらしい。

   

  

     ☆     ☆     ☆

方程式を入力するだけですぐ答が出るようにプログラミングしたいけど、まだ超初心者には敷居が高すぎてパス。

   

こんな遅いペースの進み方だと、この教科書だけで人生が終わるかも♪ それでは、また明日。。☆彡

    

        (計 2030字)

| | | コメント (0)

超初心者によるC言語入門、無料のオンライン・コンパイラ探しが困難、paiza(パイザ)がいいかも♪

もう、ドッと疲れた。。(^^ゞ 要するに、日本人が1人でたまにやるだけだから、何かと上手く行かないんだろうな。英語だらけ、大量の専門用語、トラブル続出。。

  

小学生向けのプログラミング記事を除いて、9ヶ月ぶりにプログラミング記事を書こうと思って選んだのが、名前だけは昔から度々聞いてるC言語。フツー過ぎて無意識の内に避けてたのか、過去15年間のブログでもほとんど触れてない。たった2回、言葉を出してるだけ。

    

今回は、工業高校の現行の教科書『新情報技術基礎』(コロナ社、非課税1496円)を利用して、一から始めようとしたけど、一(イチ)じゃなくて0(ゼロ)から始める必要があった。そもそも、C言語を扱える「開発環境」の準備に苦労したのだ。

   

201024a

      

     ☆     ☆     ☆

昔、高校数学の教科書でBASICを扱った時にも思ったけど、教科書はやっぱり学校で使うように出来てる。教えてくれる先生と環境が揃ってるのを前提にしてるのだ。

  

内容はかなり丁寧に書かれてるけど、私には引っかかる事だらけ。こう書けば正解、という具体例はあっても、「そう書かなかったらどうなのか?」、「別の正解は?」といった話がほとんど書かれてないから、結局は自分で試行錯誤するしかない。スペース(空白)や特殊な文字列の有無、改行の必要性など。

  

201024q

      

教科書・第5章、「C言語によるプログラミング」は、最初の2ページで大量の専門用語を簡単に並べた後、すぐにプログラミング開始。入力したプログラムを機械語に変換してコンピューターに理解させるための、「コンパイラ」(compiler)と呼ばれるソフト(またはアプリ)をどうするのかは書いてない。

   

本当のビギナーにとって、これが最大の難関だろう。情報は溢れ返ってるけど、分かりにくい説明が多いし、自分の端末でやってみると上手く行かないことが多いのだ。

   

   

     ☆     ☆     ☆

C言語ではなくJAVAなら、学習用コンパイラのiPadアプリを1月に手に入れてるけど、C言語で似たアプリはすぐには見当たらない(本当はあるんだろうけど)。

  

そこで、最近は放置プレイだけど前にしばらく使ってた学習アプリ、「Progate」(プロゲート)を使おうとしたら、パスワードを忘れてログイン不能 (^^ゞ 再発行で何とかログインすると、C言語のコースは無かった(笑)

    

仕方ないから、マイクロソフトの Visual Basic をダウンロード&インストールしようとしたら、重い、重い。よく分からないまま軽めのセットを選択しても7GB以上(!)で、あまりの遅さに中止。知らない人間がちょっと勉強するだけなのに、こんな苦労が必要なはずはない。

   

代わりにオンラインですぐ使える無料コンパイラを探すと、当然(?)海外サイトだらけで、動かなかったり、カーソルが逆向きに動いて(笑)入力が大変だったり、フィッシングで「おめでとうございます。当選!」みたいな表示が出たり (^^ゞ

  

この苦労を考えると案外、フツーにプログラミングのスクールに通う方が安上がりで手っ取り早いかも♪ しかし、小市民は無料で自宅で1人で頑張るのであった。時間の方が勿体ないんだけど。。

   

   

     ☆     ☆     ☆

失敗につぐ失敗で諦めかけた時に、ようやく良さげなサイトを発見。paiza(パイザ)ラーニング。「パイザ」は、通行証とかパスポートって意味で使ってる言葉だと思う。

  

以前のプロゲートと同じで、基本的には有料契約に誘い込む学習サイトだけど、無料の登録なしでも、超初心者の練習くらいは出来るようだ。萌え系の可愛い女の子キャラもお手伝いしてくれる♪

  

201024b

  

ここでは、コンパイラのことを、「オンライン・エディタ」と読んでる。女の子のすぐ右側だから、気分的に「入力」しやすい♪ 文字の入力ね。

  

無意味な見出しを除いて、教科書の通りに入力すると、「成功」! ちゃんと、「今日は (改行) 快晴です」と表示された。画面の一番下の、スクロールしないと見えない場所に(笑)。最初、気付かなかったほど。

    

201024c

   

201024d 

  

1行目の「#include <stdio.h>」で、stdio.hというファイルを読み込む(インクルードする)。2行目の「int main(void)」は、メインの関数(要するに命令)で、intは「戻り値」の型を指し、(void)は引数がないことを指すらしいけど、とりあえず意味不明♪

   

3行目からが実質的な指示で、「printf」で表示。二重引用符(ダブルクォーテーション)「"  "」で挟むと、そのままの文字が表示されると。日本語もOK。各行の最後のセミコロンを忘れると、次の行まで続く命令だと誤解される。

  

サイトにとっては、有料会員になってもらうのが成功か♪ 試しにクリックしてみると、「日本e-learning大賞 会長賞」☆

  

201024e

   

さらにクリックすると、12ヶ月で税込7200円か。安いね。まあでも、サブスクは使わなくてもどんどんお金を失うからな。アマゾン・プライムみたいに♪ またそれか! いや、最近、全く使ってないもんで。無理して買い物するのも妙な話だし、動画視聴は時間を取られるし。

   

   

     ☆     ☆     ☆

話を戻すと、コンパイラ探しと同じくらい時間を使うハメになったのが、改行を示す「¥n」の入力。これ、いくら頑張っても「\n」になってしまう。半角の円マークが、半角の逆スラッシュになるのだ。

  

パソコンのキーボード設定はちゃんと「日本語キーボード(106/109キー)」になってる。どうも、半角の円マークと半角の逆スラッシュは同じコードのようだけど、同じ右上のキーを押しても、場合によって「¥」が入力されたり「\」が入力されたりするのだ。

  

ちなみにこの管理画面では「\」になるから、「¥」は環境依存の文字として「えん」から変換して入力してる。それぞれの読者の端末でどう表示されるのかは知らない♪ 

  

円マークの無いプログラムだけ練習しようかと思ったけど、教科書のその後を読んでも円マークが登場。結局、パイザのサイトだと、逆スラッシュのまま「\n」と入力すれば良かった。気にしないで、無視♪

      

これがダメなサイトもあるのだ。もちろん(?)、環境依存文字もエラー。温厚で寛容な私もそこでイラついて、精神的パワーを浪費してしまった。

   

    

    ☆     ☆     ☆

201024f

   

さっきの入力を少し変えて、改行を減らして、「\n」を消してみると、「今日は快晴です」と一続きで出力された。なるほど、スペースさえ入らないわけね。

  

ちなみに、最後「return 0」のスペースを省略して「return0」と入力すると、エラーになった。こうゆうのがイヤなのだ。スペースや改行は、必要な時と必要でない時の区別をしにくい。

  

  

教科書の次は、面積の計算。というより、実際は単なる整数の掛け算。20×40

  

201024g

  

201024h

   

4行目の「/n」は省略してもいいけど、「%d」は省略不可。「値を10進数の整数値として扱う」という意味の「変換指定子」とのこと。

  

教科書のその後にある体積の計算(整数の掛け算10×20×30)も同時に書いてみたら、成功した。ちょっと調子が出て来たかも♪ 2行の命令なら、1行目だけ「\n」で改行すればいいのか。

    

201024i 

  

201024j

  

ちなみに命令部分の1行目の「\n」も消してみたら、改行が無くなって、「面積=800体積=6000」と表示された。スペースさえ入らないから、これはダメ。

  

  

     ☆     ☆     ☆

最後は、教科書・問2。「底辺の長さが4で高さが50の三角形の面積を計算し、実行するプログラムを作成しなさい」。わざと改行を減らして短く書いてみたけど、ちゃんと成功した。底辺×高さ÷2の「÷2」は、「/2」と入力するだけ。

   

201024k

   

201024l

  

実は最初、「0.5*4*50」と書いたら失敗。そうか、小数はダメなわけね。今後の研究課題としよう♪ またそれか!

 

あっ、例題5・3の球の体積だと、円周率3.14を掛けるから、整数じゃなくて実数の変換指定子「%f」を使ってた。半径6の球の体積

   

201024m

   

201024n

   

それなら、いつも%fでいいんじゃないの?、と思うけど、「現象には必ず理由がある」byガリレオ湯川♪ 何か、意味があるんだろうね。

   

あっ、実数扱いだと入力も無理やり小数にしなきゃいけないのか。面倒くさい。問4、200Ωと300Ωの抵抗の並列接続による合成抵抗の計算。指示された(下手な)数式を使うと、こうなると。何か、もっとラクに入力する技があるんだろうけど。無駄な小数点のおかげで、式も見にくい。

      

201024o

  

201024p

    

答は、いわゆる「和分の積」、200×300/(200+300)だから、60000/500=120オーム。当然、元の2つの抵抗値より小さくなる。1行目と2行目の正確な理解や、最後のreturn 0の理解は、また今度。

   

   

     ☆     ☆     ☆

フーッ。。 これでC言語もマスターしたから、次はもうC++か(笑)。シープラプラって可愛い呼び名だけは昔から知ってるのだ。記号は、エラー表示に見えるけど♪

      

それにしても、やっぱり最初の「環境構築」が一番大変だなと、あらためて痛感。自分のパソコンだと故障が怖いから、職場で試そうかな♪ コラコラ! ではまた明日。。☆彡

   

   

  

cf. 超初心者によるC言語入門2~答のケタ数指定、ルート(平方根)、三角関数、二次方程式の解の公式

    

      (計 3664字)

    (追記49字 ; 合計4713字)

| | | コメント (0)

小学校『5、6年のプログラミング ドリル』問題と解き方4、アルゴリズム、移り変わり図

この3ヶ月で、小学生向けの学習参考書『5、6年の楽しいプログラミング ドリルの王様』(新興出版社)について、問題と解き方を紹介する記事を3本書きました。

   

1本目の記事へのリンクはここです。2本目へのリンクはここです。3本目へのリンクはここです。

  

今日はそれらの続きとして、4本目の記事を書きます。はじめの2回で大まかな説明はしてるので、今回もすぐ問題に行きます。問題文の書き方は少し変えてます。

   

   

   ☆    ☆    ☆

では、第1問。ドリルの52ページの問題、「25 コンピュータの考え方②」。

  

問② そうたさんは、カード型の鍵(かぎ、キー)を使って、部屋に入ろうとしています。カードの読み取り機は、次の通りに、ドアを開けるか開けないかの判断をします。

  

1.カードの番号(横に並んだ13ケタの数)を読み取る。  2.左から1、3、5、7、9、11、13番目の数字を上に書いて、足し算する。また、左から2、4、6、8、10、12番目の数を下に書いて、足し算する

  

3.下の方の足し算の結果に3をかける。  4.上の方の足し算の結果と、3の結果を、足し算する。

 

5.4の結果の数で、一の位が0なら、ドアを開ける。一の位の数が0でないなら、ドアを開けない。

  

次のカードで、そうたさんは部屋に入れますか?

A.1235427902184   B.6827913304018

  

  

    ☆    ☆    ☆

では、解答です。Aのカードから見て行きましょう。

上の数の足し算は、1+3+4+7+0+1+4=20。下の数の足し算は、2+5+2+9+2+8=28だから、3をかけると、28×3=84。

 

だから、上+(下×3)=20+84=104。よって、一の位の数が0でないから、ドアを開けず、部屋に入れません

  

次に、Bのカードについて。上の数の足し算は、6+2+9+3+0+0+8=28。下の数の足し算は、8+7+1+3+4+1=24だから、3をかけると、24×3=72。

  

だから、上+(下×3)=28+72=100。よって、一の位の数が0だから、ドアを開けて、部屋に入れます

   

  

そんな計算しなくても、入れるか入れないかだけ、簡単にカードに書けばいいのに・・という気もしますよね。

  

たぶん、数や読み取り方(プログラム)を変えることで、色んなことが出来るからだと思います。例えば、部屋に入れるのはいつまでなのか、とか、何人なのか、とか、13ケタの数に色んな意味を持たせることができるでしょう。

   

  

    ☆    ☆    ☆

次に、第2問。ドリルの62ページの問題、「30 アルゴリズム⑤」。アルゴリズムという言葉は、前回の記事(3本目)にも書きましたが、ある目的、問題の解決に向かって、1つずつ進む手続きをまとめたもの。 もとは数学者(難しい算数のプロ)の名前です。

    

問② 家と道がかかれた下の図で、丸の中に書かれた数は、その道を通るのに何分かかるかを表します。

  

200526a

  

(1)さくらの家から、お店を通って、ゆなの家に行きます。最も早く行くためには何分かかりますか?

(2)そうたの家から、ひまりの家を通って、りこの家に行きます。最も早く行くには何分かかりますか?

    

  

   ☆    ☆    ☆

では(1)から解きましょう。時間の長さは、道の長さと比例してますが、道を見ただけだとよく分かりません。いくつか計算して、合計時間を比べることになります。

     

さくらの家からお店までは、ゆうまとひまりとゆなの家を通るのが一番早くて、4分+3分+5分+2分=14分です。次に、お店からゆなの家までは、2分です。だから、合わせて、14分+2分=16分です。

  

ゆなとお店の間の道は2回通りますが、2回はダメとは書いてないので大丈夫です。また、さくら→ゆうま→そうた→りこ→お店→ゆなの順なら、4分+5分+3分+6分+2分=20分。だから、16分より遅くなってしまいます。

   

次に(2)。まず、そうたの家から、ひまりの家までは、ゆうまの家を通るのが一番早くて、5分+3分=8分。次に、ひまりの家からりこの家までは、来た道をそのまま帰って、ゆうま、そうたの家を通るのが一番早いです。3分+5分+3分=11分。

  

だから、合わせて、8分+11分=19分です。

  

このような、時間や長さが最も短い道を探す問題は、家と道が増えると面倒で難しくなるので、人間だと大変。だから、コンピューターが色々な道の時間を計算して、比べて一番短い時間や距離を探すことになります。

    

   

    ☆    ☆    ☆

次に、第3問。ドリルの70ページの問題、「34 移り変わり図①」。いくつかのもの(物、人など)の状態が、少しずつ変わる様子を考える図のことです。 

    

問② 下図は、スーパーのレジでのやり取りを表したものです。

  

200526b

  

次の説明から、正しいものを2つ選びましょう。

ア.客は商品を置くと同時にお金をはらう。   イ.レジ係は合計金額を伝えると同時に商品をわたす。

ウ.客は商品の合計金額を確かめてからお金をはらう。   エ.レジ係は客がはらったお金を確かめてから合計金額を伝える。

オ.客は商品のお金をはらってから商品を置く。   カ.レジ係は客がはらったお金を確かめてからおつりと商品をわたす。

  

  

     ☆    ☆    ☆

これは、図が無くても、常識で分かるでしょう♪ まず、ウが正しいですね。図だと、左上あたりを見ればそうなってます。

 

次に、カが正しいですね。図だと、右下あたりを見ることになります。

   

     

実際のスーパーやコンビニ、100円ショップだと、商品が1コなら、お客さんは商品とお金を同時に置くことがあります。また、合計金額を伝えると同時に商品を客の近くに置くレジ係もいます。

   

客とレジ係がお互いによく知ってて、相手を信頼してる場合も、あまり順番にはこだわらないでしょう。上図はあくまで、機械的な決めごと。今後はレジ係もロボットが増えるでしょうから、きっちり決めておく必要があります。

    

2つのコンピューターで、互いにデータをやり取りしながら計算していく場合も、似たような図になるでしょうね。それでは今日はこの辺で。。☆彡

   

      (計 2436字)

| | | コメント (0)

小学校『5、6年の楽しいプログラミング ドリルの王様』、問題と解き方3

この1ヶ月半で、小学生向けの学習参考書『5、6年の楽しいプログラミング ドリルの王様』(新興出版社)について、問題と解き方を紹介する記事を2本書きました。1本目の記事へのリンクはここです。2本目へのリンクはここです。

  

今日はその続きとして、3本目の記事を書きます。下の画像は、AMAZON(アマゾン)の通販ページです。同じシリーズで、小学1・2年生用、3・4年生用のドリルもあります。

       

200305a 

   

  

    ☆    ☆    ☆

前の2回で大まかな説明はしてるので、今回はすぐ問題に行きます。

では、第1問。ドリルの49~50ページの問題、「24 コンピュータの考え方①」。

  

問① 2つのカーペットを重ねると、色が変わります。白の部分と白の部分が重なると、そこは白になります。それ以外の重なり方だと、その部分は黒になります。

では、下の2枚のカーペットを重なると、どんな模様(もよう)になりますか?

  

200414a

  

   

   ☆    ☆    ☆

この変化は、わりと簡単にイメージできると思います。答は下図です。

 

200414b

  

   

この変化はいずれ、中学校・高校・大学とかで、「ORゲート」のような名前で習います。読み方は、オーアール・ゲートとか、オア・ゲート。コンピューターの設計図の部品(のはたらき)なのです。

    

白と白で、白」は、「0+0=0」などと書きます。「黒と黒で、黒」なら、「1+1=1」などと書きます。ちょっと変な計算だけど、すぐになれます。書き方は色々あるので、その時の先生や本などの指示に合わせます。

  

  

    ☆    ☆    ☆

問③ 次の変化では、重ねる2枚のカーペットの片方でも白の部分は、白になります。黒の部分と黒の部分が重なると、黒になります。そのルールで色を変えた後、さらに、白は黒に変え、黒は白に変えます。

  

次の2枚のカーペットを重ねると、どんな模様(もよう)になりますか?

  

200414c2

  

  

    ☆    ☆    ☆

1つずつ、進みましょう。まず、2枚を重ねるだけだと、下図のようになります。

   

200414d

   

さらに、白と黒を入れ替えると、下図になります。これがです。

  

200414e

  

  

1つめの変化はいずれ、中学校・高校・大学とかで、「ANDゲート」のような名前で習います。読み方は、アンド・ゲート。これもコンピューターの設計図の部品です。

    

白と黒で、白」は、「0・1=0」などと書きます。「黒と黒で、黒」なら、「1・1=1」です。ちょっと変な計算だけど、すぐになれます。

  

2つめの変化はいずれ、「NOTゲート」のような名前で習います。読み方は、ノット・ゲート。コンピューターの設計図の部品なのです。「白は、黒になる」なら、「¬0=1」。「黒は、白になる」なら、「¬1=0」などと書きます。

   

2つの変化を合わせて、例えば、「黒と白を合わせて白にした後、黒になる」のなら、「¬(1・0)=1」などと書きます。ちょっと難しいですね。今はまだ、ふう~んと聞き流していいです♪

   

  

   ☆    ☆    ☆

では、第2問。ドリルの59ページの問題、「29 アルゴリズム④」。

  

ロボットに命令して、5つの箱に書かれた数を、小さい順に並べ替えます。最初は左から右に、5、2、3、1、4と並んでます。ロボットは次のルールに従って、左右に動きます。

 

1. 正面の数と右どなりの数を見る。

2. 右どなりの数の方が小さければ、正面と右隣りを交かんする。

3. 右へ移動する。右端に移動するまで、1~3をくり返す。

4. 右はしまで来たら、左はしにもどる。右はしに移動した箱は見ない。

  

下の表の、(ア)、(イ)、(ウ)、(エ)に当てはまることばは何ですか? また、全部で何回、箱を交かんしましたか?

  

比べた回数 比べる数 交かん 比べた後のならび方

0回目            52314

1回目  5と2  する  25314

2回目  5と3  する  23514

3回目  5と1  する  2315

4回目  5と4  する  23145

 (左はしにもどる)

5回目  2と3 しない  23145

6回目  3と1  する  21345

7回目  3と4 (ア)  21345

 (右はしの5は見ないで左はしにもどる)

8回目  2と1 (イ)  12345

9回目  2と3 (ウ)  12345

(右はしの4と5は見ないで左はしにもどる)

10回目  1と2 (エ)  12345

  

  

    ☆    ☆    ☆

ちょっと難しいですね。特に、右はしに来た時にどうするのか、問題文のルールも分かりにくくなってるので、自分で「たぶん、こうゆう意味だろうな」と考えることになります。問題文が長いので、少しはぶいて短くしてるのです。

    

7回目。3と4を比べると、右の4の方が大きいので、交かんは「しない」・・(ア)の答。8回目。2と1を比べると、右の1の方が小さいので、交かんは「する」・・(イ)の答

  

9回目。2と3を比べると、右の3の方が大きいので、交かんは「しない」・・(ウ)の答。10回目。1と2を比べると、右の2の方が大きいので、交かんは「しない」・・(エ)の答

  

全部で、交かんは、6回です。・・・

   

   

    ☆    ☆    ☆

全体を大きく見直すと、ロボットの右への動き4セットになってます。1つ目のセットで、5が一番右に決まります。次に左はしにもどって、2つ目のセットで、4が右から2番目に決まります。

  

また左はしにもどって、3つ目のセットで、3が右から3番目に決まります。また左はしにもどって、4つ目のセットで、2が右から4番目に決まって、おしまいです。最後のセットではもう、ロボットは動かず、1と2を見て比べるだけです。

   

アルゴリズム」という言葉は初めて聞いたかも知れませんね。ある数学者の名前から作った言葉なのです。要するに、何かある目的、問題の解決に向かって、1つずつ進む手続きをまとめたものです。

   

例えばこの問題なら、5つの数を小さい順に並べるための手続きのまとめ(アルゴリズム)、ということです。その中で、たとえば2つ目のセットなら、左側の4つの数の中で一番大きい数(つまり4)を、右はしから2番目に決めてるのです。

  

新型コロナウイルスのせいで大変ですが、気楽にがんばってくださいね♪ それでは、今日はこの辺で。。☆彡

   

     (計 2412字)

| | | コメント (0)

小学校『5、6年の楽しいプログラミング ドリルの王様』、問題と解き方2

1ヶ月前、小学生向けの学習参考書『5、6年の楽しいプログラミング ドリルの王様』(新興出版社)について、問題と解き方を紹介する記事を書きました。

   

今日はその続きとして、2本目の記事を書きます。

     

200305a 

  

上の画像は、AMAZON(アマゾン)の通販ページです。同じシリーズで、小学1・2年生用、3・4年生用のドリルもあります。

   

  

    ☆    ☆    ☆

前回も書きましたが、プログラミングとはもともと、コンピューターにやらせたい仕事を上手く分けて、きちんと順序立てて書くことです。

   

そこで書かれたものが、プログラムです。分けること、つなぐこと、順番。この3つがポイントです。

  

前回は、「順序」、「くり返し」、「分岐(ぶんき)」の問題をやりました。今回はまず、「変数」についてです。変数とは、色々と変わるもの(数、言葉)をまとめて表す、特別な言葉や記号のことです。

  

「変数」と呼ばれるものなのに、数とはかぎらないのか? おかしいと思った人もいるでしょうね♪ 実は、もとの英語だと「ヴァリアブル」(variable)だから、「変化するもの」という意味の単語。それを誰かが、変数という日本語に訳したのです。

  

  

    ☆    ☆    ☆  

では、第1問。ドリルの27ページの問題、「13 変数②」。

  

ゆうなさんは、カーテンをつくることにしました。次のメモのとおりに布を切るとき、長さはいくつになりますか?

① 長さ←3  ぬいしろの長さ←2  長さ←長さ+ぬいしろの長さ

   

  

「長さ」という言葉が5回も出て来て、分かりにくいですね。特に、右端の「長さ←長さ+ぬいしろの長さ」という書き方はおかしいような気がします。

   

これはプログラム用の特別な書き方で、「長さ」と「ぬいしろの長さ」という言葉が変数です。矢印(←)の右には、変数に入れるいろんなもの(数、言葉)が書かれてます。本物のコンピューターのプログラムだと、矢印(←)の代わりに、イコール(=)と書きます。

   

もっとフツーの言い方に直すと、こうゆう問題なのです。

「まず、もとの布の『長さ』を3としますこれは出来上がった時のカーテンの長さです。次に、『ぬいしろの長さ』を2とします。最後に必要な布の長さ全体を、『長さ』+『ぬいしろの長さ』とすると、その数は結局いくつですか?」

   

これならもちろん、3+2で、だと分かるでしょう。プログラム独特の書き方になれることが大切なのです。もう1つ、似た問いを解いてみましょう。

  

②  長さはいくつになりますか?

 長さ←9  ぬいしろの長さ←3  長さ←長さ+ぬいしろの長さ

   

  

は、 9+3=12 ですね。

  

  

   ☆    ☆    ☆

ちょっとだけ違うタイプの問いも見ておきましょう。こちらの方が分かりやすい文章だと思います。

  

 ゆうなさんは、布の長さから、カーテンの長さを知るために、次のメモをかきました。

 カーテンの長さ←布の長さ-ぬいしろの長さ

  

 それぞれの長さが次のとき、カーテンの長さは?  

 布の長さ←10  ぬいしろの長さ←3

  

    

さっきは足し算でしたが、今回は引き算。は、 10-3= です。

   

  

   ☆    ☆    ☆

では、第2問。ちょっと中学の算数(「数学」)に近づいてる問題です。「19 関数②」。計算機とか、計算するプログラムのお話です。

  

さくらさんは計算ロボットに、次の命令を覚えさせました

  

 平行四辺形の面積(底辺,高さ)とは

  結果←底辺×高さ

  結果 を表示する

 である。

  

次の命令を実行すると、何が表示されますか

 平行四辺形の面積(2,4)

  

   

    ☆    ☆    ☆

これも書き方が分かりにくいでしょう。ロボットの画面に表示されるのは、底辺の長さ2、高さ4の平行四辺形の面積の数だけです。内部でこっそり計算して、その結果の数字だけが表示されます。

      

まず結果は、底辺×高さだから、2×4=8。そして、この結果を表示するという命令になってます。だから、表示されるのはという数字のみ。これがです。

   

この問題だと、平行四辺形の底辺、高さ、面積の3つが変数です。ただ、底辺と高さから面積を求めてるので、

 面積は底辺と高さに「関係する数」

です。これを縮めて、

 面積は底辺と高さの「関数」

などと言います。今はあまりピンと来なくてもかまいません。くわしくは中学で習う内容です。

   

   

   ☆    ☆    ☆

では、第3問。ドリルの「22 変数⑤」。ここでは、数の計算だけでなく、ロボットの動きが問われます。

  

1番から6番まで、番号がついた6つの家があります。そうたさんは、次のようにロボットに命令しました。

 番号←3

 ピザを配達(番号)

  

このとき、ロボットは3番の家にピザを配達します。  

では、次の命令だと、ロボットはどの番号の家にピザを配達しますか?

  

 番号←1

 ピザを配達(番号)

 番号←番号+3

 ピザを配達(番号)   

 

  

   ☆    ☆    ☆

解くときのコツ、考え方は、4行の命令を、前半2行と後半2行に分けること。命令の前半2行で、ロボットは番号1の家にピザを配達します。

   

後半の2行は、まず「番号←番号+3」と書かれてます。これは、「新しい番号は、前の番号+3とする」という意味。つまり新しい番号は、1+3=4になります。だから、ロボットは番号4の家にピザを配達します。

  

前半と後半を合わせると結局、ロボットがピザを配達するのは、1の家と4の家。これがです。

  

  

    ☆    ☆    ☆

今日のどの問題も、計算はとてもカンタンですね。ただ、書き方が変わってるので、繰り返し練習して、なれることがポイントです。まず、読み取れるようになること。つまり、プログラムを読めること。次に、自分で書けるようになること。つまり、プログラミングできること。

  

新型コロナウイルスのせいで、ずっと家にいる人も多いでしょう。遊びみたいな感じで、勉強も楽しんでください。それでは。。☆彡

   

     (計 2301字)

| | | コメント (0)

小学生の学習参考書、『5、6年の楽しいプログラミング ドリルの王様』(新興出版社)、問題と解き方

今週から新型コロナで学校が長いお休みになって、困ってる小学生も多いでしょう。そこで今日は、春から始まるプログラミング学習の勉強に役立つドリルを紹介します。新しい教え方(新学習指導要領)に対応した面白い本です。

  

200305a

    

AMAZON(アマゾン)でも通販されてる『5,6年の楽しいプログラミング ドリルの王様』(新興出版社)です。著者(書いた人)は、島袋舞子。監修(チェックした人)は兼宗進教授です。680円+消費税で、今買うと合計748円です。

   

全体は96ページですが、アマゾンでは8ページ分のイメージ画像を載せてるので、それを解いてみましょう。

  

  

     ☆     ☆     ☆

プログラミングとはもともと、コンピューターにやらせたい仕事を上手く分けて、きちんと順序立てて書くことです。そこで書かれたものが、プログラムです。分けること、つなぐこと、順番。この3つがポイントです。

   

小学校の勉強では、自分でプログラムを書くことも大切だし、与えられた順序(プログラム)にしたがって自分が何かをすることも大切です。本やテストに書いてある通りに、先生の言う通りに、手を動かしたり、他の事をしたりするのです。

 

ではドリルの一番最初の問題。「1 順序①」の2番です。

  

次の順番でかいた絵はどれですか? 1.画用紙の右下に円をかく。 2.画用紙の右上に星をかく。 3.画用紙の左下に三角形をかく。

  

200305b

  

   

これはとても簡単ですね。次の図の、上から下へと進んで行けばいいのです。

  

200305c

  

ということは、答はエです。これをさらに、左右が逆になるようにクルッと回転させればウになりますが、問題ではそんなことは書かれていません。書かれてる事だけを、正しく行うのです。

  

  

    ☆     ☆     ☆

第2問は、「3 順序③」の1番。車のロボットの問題です。ロボットと言うより、オモチャのラジコンカーの操作ですね。

  

車のロボットを動かして線を書きます。命令は2種類で、「1マス進む」と「左を向く」です。

「はじめ → 1マス進む → 左を向く → 1マス進む → 1マス進む → おわり」と命令したとき、どんな線になりますか?

   

200305d

    

  

これもカンタンですね。下の図で、左から右に進んで行けばいいのです。

  

200305e

  

はまた、になります。車は最後、上側を向いてます。

  

  

    ☆     ☆     ☆

第3問は、「6 くり返し②」の1番。飛行機(ひこうき)のロボットを動かします。「3回くり返す → ・・・・・・ → ここまで」とプログラミングすると、「・・・・・・」の所の命令を3回続けて行います。

  

次のようにロボットに命令したとき、どの場所に行きますか? 「はじめ → 3回くり返す → 1マス進む → 右を向く → ここまで → おわり」。 

  

200305f

  

まずアに進んで、下側を向く。次に下側に進んで、左側を向く。さらにエに進んで、上側を向く。だから答はエ。飛行機は最後、上向きになります。

   

  

     ☆     ☆     ☆

では最後、第4問。「10 分岐④」の1番です。分岐(ぶんき)とは、分かれること、あるいは、分かれ目のことで、普段は使わないちょっと難しい言葉です。

  

ゆうなさんは、いろいろな形のクッキーを作って友人に配ります。クッキーを袋(ふくろ)に入れるのを妹に手伝ってもらうために、命令の図をつくりました。

   

200305g

  

この命令にしたがうと、丸いクッキーは「花がらのふくろ」に入るし、ハート形のクッキーは「水玉もようのふくろ」に入ります。

  

では、□(四角)のクッキーはどのふくろに入りますか? また、☆(星型)のクッキーはどのふくろに入りますか?

  

   

一目見てすぐに答えるのではなく、質問や条件にしたがって、一歩ずつ順序立てて考えることが大切です。四角のクッキーなら、下図のように進んで、答はチェックがらのふくろです。

   

200305h

  

星型のクッキーの場合は、「はじめ→いいえ→いいえ」と右側に進んで行くので、答えは水玉もようのふくろです。このように、命令の流れを表す図は、流れ図フローチャートなどと呼ばれます。フローは流れ、チャートは図を表す英語です。

   

お休み中に家で勉強するのは大変ですが、カンタンで楽しい勉強でいいので、少しずつがんばってくださいネ♪ もちろん、ウイルス感染には注意して。ではまた。。☆彡

   

     (計 1693字)

| | | コメント (0)

iPad、iPhone用のJava学習アプリ、Jedona(Compiler for Java)

マニアックな事で困った時には、反射的にネット検索をかけるクセがついてるけど、アプリ検索という手もあった。正直、アプリというものは種類が多過ぎるし、ハズレやバグ(欠陥)ですぐ削除することもよくある。ただ、これは今の所、有難い限り♪ 人気がさっぱりないけど評価が高いのは、言語が英語のみだからだと思う。

  

200118a

  

Jedona(ジェドナ?)。Compiler for Java(コンパイラー・フォー・ジャバ)。自分が入力したジャバのプログラムを、機械が読み取れるように変換(コンパイル)して、表示してくれるアプリ。

   

先日、パソコンで普通にJavaを導入しようとしたら、コンパイルまでは何とかなったのに、最後の表示でつまづいてしまった。コンパイラーと読み取りアプリのバージョンの不適合みたいで、どんどん事態がこじれて行きそうだから、とりあえず断念。

  

ただ、やっぱり気になるからアプリを検索したら、1つ目はほとんど使い物にならなくてすぐ削除したけど、2つ目のこれがヒットだった。広告は出るし、データ保存ができないみたいだけど、課金なしで色々練習できるから、超初心者にとっては十分だ。動きも軽くて、変なエラーもこれまで出てない。私の入力ミスを除けば♪

   

   

     ☆     ☆     ☆

200118d

  

最初は黒い背景で、ちょっとだけややこしい入力例が出て来たけど、とりあえず無視。まずはお約束の「Hello World!」の表示プログラム。画面右上の再生ボタンをタップすると、素早くコンパイルして、表示成功。1行目のクラス名で1回失敗した後♪ ファイル名に合わせないといけないのかな? 一部の文字の色は、自動的に付けてくれてる。

   

200118e

   

ただ、黒い背景だと、Windowsのコマンドプロンプトみたいで難しそうに見えるから、設定の下側(Editor Theme)で白(White)に変更。ついでに入力と出力の文字(Font Size)も大きくした。英語といってもこの程度で、実際、年齢設定も4+(4歳以上?)になってる。

   

200118c

  

続いて、足し算とかけ算。この辺りは、別に覚えてるわけじゃなくて、例の学習アプリ「Progate」の説明に従ってるだけ。一応、数や文字は自分で少し変えたりしてる。

  

200118f

  

5+3と、2×7をやらせると、8と14が2行で表示された。ちなみに、printlnではなく、単にprintと入力すると、同じ1行の中で表示されてしまうから、普通は避けるところだ。   

200118g

  

  

    ☆     ☆     ☆

200118h

  

さらに、文字列の「足し算」。2つの文字列「blogger」「Tenmei」をそれぞれ二重引用符でくくって、足し算すると、2つがつながって表示される。

  

200118i

  

そして、眠いから早くも最後。変数を2種類設定して、それぞれ代入して表示させたら、エラーが二重に出てしまった♪ 下が最初の私の入力。整数を表す int 型の変数「number」を設定して、7を代入して、表示。次に、文字列を表す String 型の変数「name」を設定して、Tenmei を代入して、表示。以下、間違い探しをお試しあれ♪

  

200118k

  

驚いたのは、どこが間違ってるのか指摘してくれたこと。これがAI教師というものか。無料で素早く正確。ちょっと不愛想だけど♪

   

200118l

  

「5行目にエラーがあって、セミコロンを忘れてる。7の右側」といった指摘なのだ。具体的で、いいね♪ ただ、もう1つのミス(Tenmeiの引用符を忘れてた)の指摘はそこまで分かりやすくはなかった。

  

200118m

  

    ☆     ☆     ☆

とにかく2ヶ所直ちに修正して、出力成功。パソコンで本格的に導入するのは大変な作業で結局失敗したけど、タブレットのアプリなら、あっという間だった。もちろん、いずれPCに再挑戦する予定(予定は未定♪)。

  

さあ、今週末は私もセンター試験の「受験」があることだし、そろそろ寝ることにしよう。ではまた。。☆彡

   

        (計 1569字)

| | | コメント (0)

より以前の記事一覧