ホーム » 2019 » 6月 » 14

日別アーカイブ: 2019年6月14日

2019年6月
« 5月   7月 »
 1
2345678
9101112131415
16171819202122
23242526272829
30  

最近の投稿(電子情報)

アーカイブ

カテゴリー

型の無い言語からC言語を学ぶと

情報構造論の中間試験の採点をしていて気づいたこと。

プログラムが解っていない学生の回答で、関数呼び出しで実引数に int とか実引数の型を書く学生がいる。

int foo( int x ) {
   return x * x ;
}
void main() {
   for( int i = 0 ; i < 10 ; i++ )
      printf( "%d" , foo( int i ) ) ;
}                         ~~~ なぜ int を書くの?

でも、最近の学生はプログラミングで最初に習うプログラム言語が、JavaScript だったり、Python だったりと、型の無い言語であることが多い。

こういう学生さんは、関数宣言と関数呼び出しでは、以下のような感じで習うことだろう。

// JavaScript
function foo( x ) {
   return x * x ;
}
for( var i = 0 ; i < 10 ; i++ )
   print( foo( i ) ) ;

## Python
def foo( x )
   return x * x

for i in range( 0 , 10 )
   print( foo( i ) )

んで、こういう学生さんは、関数宣言の仮引数部分を見ると、変数名しか書いてない。この後にC言語を習うと、仮引数の宣言で foo( int x ) みたいに書いてあると、そこに int と書かないとダメみたいに思う、もしくは int x で一つの引数みたいに思うんだろうな。
だから、関数呼び出しの実引数にで、foo( int i ) みたいに型名を書いてしまうと思われる。int というのは、整数型にするためのもの…みたいなイメージなんだろうか?。

C言語での関数宣言と関数呼び出しの説明

// fooという関数の宣言
int foo( int x )    // foo()の関数の答えの型は、int型。
         ~~~~~~仮引数
{                   // 仮引数 x の型は、int 型。
   return x * x ;
}
void main() {
   for( int i = 0 ; i < 10 ; i++ )
      printf( "%d¥n" , foo(  i  ) ) ;
                            ~~~実引数
      // foo() の第一引数は、整数型を書かないといけない。
      // 1番目の実引数 i の型は、int i で宣言されているから、int 型。
      // foo( 1.2 ) と書くと、第一引数は double だから、
      // 引数の型が合わないのでエラー。
}

関数宣言の引数は、仮引数と呼ぶ。関数を呼び出すときの引数は、実引数と呼ぶ。
C言語では、関数宣言の仮引数には「型」を明示する必要がある。(というか変数宣言では型を明示しないとダメ)
さらにC言語では関数を呼び出すときに、仮引数と実引数で「型」が一致していないとエラーとなる。

JavaScript や Python では、変数に「型」という概念が不要なので、仮引数宣言には「型」を明示する必要がない。

C言語 や Java は、静的な型付けの言語。最初から型がきまっていないとダメな言語

これに対し、JavaScript や Python という言語は、動的な型付けの言語。プログラム言語が実行中に型を意識しながら動く言語。

福井高専の対外接続の速度

福井高専ではSINETによって接続されているけど、次の更新の際に十分な性能があるかのために、ネットワーク利用状況の確認。

瞬間最大風速で、150Mbps 。ムーアの法則に従うとすれば、2年で2倍と考えると、2022年で約500Mbps, 2025年で1.2Gbps 程度となる。特に今後 学内でBYODが拡大すると、さらなる通信速度が必要と考えられる。

MoodleのSTACKをインストール

数学の先生より、本校で運用している Moodle サーバで、数学の表示や小テストのためのプラグインの STACK をインストールしてほしいとの要請があったので、インストールしてみた。

maxima,gnuplotなどのインストール

STACK は、数式表示に maxima 、グラフ表示に gnuplot を使うのでインストール

# aptitude install maxima
# aptitude install gnuplot gnuplot-common

mathjaxのインストール

JavaScript で 数式表示をするための mathjax をインストール

# aptitude install libjs-mathjax fonts-mathjax-extras

プログラムは /usr/share/javascript/mathjax/ に保存されているので moodle から使えるように、ライブラリに登録

# cd /usr/share/moodle/lib
# ln -sf /usr/share/javascript/mathjax .

STACKに必要なmoodleプラグインのインストール

“moodle stack”でググったサイトの情報では、zip で拾ってきて、解凍、リネームとか書いてあったけど面倒なので、他のやり方として git の説明があったので、そのまま git を実行

# cd /usr/share/moodle
# git clone git://github.com/maths/
                  moodle-qbehaviour_dfexplicitvaildate.git
            question/behaviour/dfexplicitvaildate
# git clone git://github.com/maths/
                  moodle-qbehaviour_dfcbmexplicitvaildate.git
            question/behaviour/dfcbmexplicitvaildate
# git clone git://github.com/maths/
                  moodle-qbehaviour_adaptivemultipart.git
            question/behaviour/adaptivemultipart

一旦、管理者アカウントでログインし、管理ブロックから通知をクリックしてインストールを完了させる。

STACK本体のインストール

さらに、stack 本体をインストール

# git clone git://github.com/maths/quiz_stack.git
            mod/quiz/report/stack

管理ブロックから通知をクリックしてインストールを完了。

# git clone git://github.com/maths/moodle-qformat_stack.git
            question/format/stack

再び、管理ブロックから通知をクリックしてインストールを完了。

最後に動作確認で、無事数式やグラフが表示されていたので、大丈夫だろう。

遅すぎるのでCASのキャッシング

インストールの参考にしたサイトの記事では、数式やグラフ表示などで CAS を使うけど、大量の情報が残ってHDDを消費するとの記載が書いてあったので、キャッシングしない設定にしていた。しかし、遅すぎて使い物にならないのでは意味がないので、「データベースのキャッシュ」にしてみた。

当面、これで運用してみて、HDD が逼迫するようであれば、Moodle サーバはAzureサーバ上なので、HDD の設定を検討してみよう。