これがベトナム大学院の実態だ!

Trường Đại Học Bách Khoa Thành Phố Hồ Chí Minhの大学院修士課程に社会人入学

日本の部活動至上主義に思う

本の学校の場合、授業を受けに行っているというより部活をしに行っているという方が正確だろう。
中高だと部活強制、大学に入るとサークルと呼ばれるが中身は同じだ。ただ、大学の場合必須ではない。
ただ、中高で部活動至上主義に毒されたからか、みんなサークルに入る。
でも、これは意外とありがたかったかも。
高校に入ると授業が難しくて何を言っているのか分からないが、気分転換というか学校の存在意義として部活は有効だ。
大学でも授業と授業の合間に部室に行ったり、そもそもサークルをしに学校に行っていた感が強い。
いずれにしろ部活やサークルがメインで、授業はおまけのようなものだ。
ただ、先輩から教科書や授業のやり口を聞けるのでサークルに入ることで授業が有利になる一面もあった。

さて、これは大学までと大学院からの違いなのか日本と外国の違いなのか不明だが、ベトナム大学院では部活やサークルの類はなく、純粋に授業を受けに行っていることになる。
日本での学生生活と違い、授業がメイン。
大学生協や各種設備もなく、夜には閉まるコンビニや売店があるぐらいだ。
一切の気分転換がなくつまらないが、学校というものは本来はこうなのかもしれない。
日本の部活動至上主義に毒され続けた違和感はまだ抜けそうにないが。

外国の大学院の安心パック補足論

前回安心パック論について書いたが、そもそも自動車学校の場合の安心パックとは何か詳細を見たところこのようなものであった。
・通常料金に1万円を上乗せする代わりに何十万円という追加料金を取らないという保険のようなもの
・追加料金を取らないだけで、追加教習はある。
つまり、金で時間を買っているわけではなかった。
いずれにしろ普通免許とか文字通り普通に何十万円という追加料金を取られるので、たった1万円でそのムダ金を取られずに済むのだからAUI盗難保険のようなものだ。
一応年齢ごとに安心パック保険料は違い、24歳までが1万円、その後逓増し、50代だと10万円超えだが、そもそも追加料金は10万円ではすまない上、そもそも普通免許は高校卒業か、遅くとも大学在学中に取る物なので絶対に入った方がいいだろう。

さて、大学の単位についての安心パックも同じ理論であれば金の節約になるだけで時間は節約できないことになる。
ベトナムの場合授業料は安いので、金の節約は考えなくていい。
ただし1回の授業が2時間半。日本だと1時間半。あと駐車場を間違えると出庫に異様な時間がかかり、たった1コマ受けるのに莫大な時間の無駄になる。
特に夜の西門の混雑は異常。同じクラスのトルコ人が南門を利用しているのを見て、その後自分も南門派だ。

外国の大学院で有効な安心パック

よく、日本の大学は入学は難しいが卒業は簡単、外国(とくにアメリカ)はその逆と言われる。
厳密には多少の例外はあるが、99%の大学はそうなのだろう。
自分の場合は日本の大学とベトナムの大学院の比較なので、学部と院の違い、日本と外国の違いがそれぞれ合わさったものになる。

具体例として、日本の大学ではまともに通っていれば(欠席が4~5回ぐらいなら)単位を取得できる。
実際、大学4年間で必修科目の単位を落としたのは英語ぐらいだ。理由はほとんど出席しなかったからかな。
その他の科目は欠席を5回以内にとどめ、単位習得に至った。
その他、1回も出席しなかったので落とした科目はたくさんあるが、基本的に出席の方が多い科目は単位習得している。
結果として、授業に出れば単位取得も同然。さらにラッキーなことにほとんど出席していないのにボーナス科目として単位取得できたものもある。
分類すると
1. 出席して単位取得→わかる
2. 出席しないのに単位取得→ボーナス
3. 出席したのに落ち科目→こんな理不尽なものはない
4. 出席しないで落ち科目→自業自得

さて、ベトナムの大学院の場合は
1. 出席して単位取得→とは限らない
2. 出席しないのに単位取得→ありえない
3. 出席したのに落ち科目→こんな理不尽がまかり通る
4. 出席しないで落ち科目→自業自得

2番の出席しないのに単位取得はさすがに日本が甘すぎかと思うが、3番の出席したのに落ち科目というのが普通に存在する。これは日本ではまずありえない光景だ。普通は平常点があるからね。
1科目の授業料が1万円~2万円ぐらいというのが救いか。それでも2度3度登録することを考えると決して安いとは言えない金額ではあるが、アメリカ大学のように1科目の授業料が20万円というのよりはましだろう。
いずれにしろ同じ科目に何度も何度も金を払うのは無駄だ。そこで単位保障というわけだ。
一部の自動車学校では規定以上の料金は頂きませんというところもある。安心パックというらしい。一応落ちた分の郷愁はあるが、定額保証だ。あるいは液晶ディスプレイのドット抜け保障にも似ている。
つまり授業料の1.25倍を払うことで確実に単位が取得できるというわけ。
これだったら1.5倍払ってもいい。落ちたら2倍取られるからな。
日本人からすれば授業料の2倍を払ってもいいから単位保障ありの安心パックがあれば時間が節約できるのはもちろん、結果として金の節約にもなる。
時は金なりというが、金で時間を買うわけだ。一見すると金で単位を買っているように見えて、実は買っているのは時間ということになる。

日本の大学のGPAはどのぐらい?

ベトナム大学院に入学する際日本の大学の卒業証明書や単位習得証明書のベトナム語翻訳版を要求されるが、ここで関連してアメリカ大学院に入学する場合、GPAという言葉がよく聞かれる。
何やら難しそうな言葉だが、平たく言えば平均点だ。高校生なら評定でもいい。まあ、普通に平均点と言えばだれでもわかる。
大学の場合100点満点だが、これを4点満点に換算する。
もっとも単純に25で割るわけではなく、このような計算式があるようだ。
ページタイトル| 日米教育委員会 フルブライト・ジャパン
大学の英文成績証明書を発行すると、アメリカの5段階評価欄と同じ区分けであることが分かる。
ただ、S、A、B、Cとなっているので読み替えは必要だが。
自分の場合必要単位数124単位に対して132単位習得していた。単位を落とした場合に備えて多めに登録していたのだ。結果として8単位多く取得したことになる。
インターネットの掲示板などをみるとたった2単位足りないばかりに留年となってしまった嘆きの書き込みもある。
この人がギリギリの登録だったのか、それともかなり多めに登録したが軒並み落としたのかは分からないが、もし単位売買制度があったらこの8単位で救済できる人がいたかもしれない。

さて、この132単位にS=4、A=3と順に重みをかけてくと404点。
これを132で割ると2.257575758であった。
一般的には小数点以下2桁ぐらいあればいいので、GPA2.26となる。
ここで日本独自ルールがあり、SとAと統合して日本版A=4とするのもあるようだ。
この場合採点店は2点だから、大幅な底上げが可能。この場合GPA=3.06である。日本とアメリカの成績制度の違いを利用した得点アップ術だ。

ここで気になるのが、日本の大学で成績証明書=単位習得証明書である。
つまり、落ちた科目は記録に載ってこない。
アメリカ式に落ち科目も正直に申告しようにも、大学側が落ち情報を提供しない。
なので成績をよく見せようとねつ造するつもりはさらさらなくても、GPAの最低点は1.0点か2.0点である。
アメリカ大学院にはGPA2.0点が必要なので、日本ルールで計算すれば大卒なら自動的にアメリカ大学院出願要件を満たしてしまう。
自分の場合落ち科目が何科目だったかは今まで食べたパンの枚数を聞かれるようなものだ。卒業式の日に配られた成績表を引っ張り出してくれば分かるかもしれないが。
仮に登録単位数を300単位とすると、アメリカ方式GPAは0.99となる。
まあ、落ち科目なんて過去の話だし、落ちた科目を引きずってくよくよするよりも、未来に向かって前を向こうという意味では成績証明書=単位習得証明書であり、落ち科目情報を載せない日本の大学に軍配が上がる。

ベトナム大学院での教科書代は?

日本の大学では教授が書いた教科書が数千円のぼったくり価格で大学生協で売られており、半年か1年でごみと化す。
実際には捨てるんじゃなくて後輩にあげたりするから、自分も先輩からもらって無駄な金を節約することもあった。
さらに、アメリカの大学では教科書が1冊数万円だそうだ。

さて、ベトナムではどうか?
一応教科書らしきものはあるが、先生の手作りのパワーポイントファイルやそれをもとにしたPDFが配布あるいは勝手にDLという場合がおおい。
まれに専門書のPDFファイルをネットからDLする場合もあり、日本の著作権法の及ばない国ならではの節約術だ。
そしてこれは年に1教科か2教科だが、教科書が必要な場合もある。
しかし値段は日本円換算で100円か、どんなに高くても200円程度である。300円以上になることはない。
むしろ下手な喫茶店でコーヒーを飲むより安いぐらいだ。
一応教科書の著者はその科目の先生となっていたが、決して金儲けではなく、むしろ紙や印刷コストを考えるとほぼ原価ぐらいだろう。
これは国全体が教育に対して支援しているということだろう。本来日本もこうあるべきだ。
ただ、教科書は安いがあくまでも機材は持ち込み。
日本の大学と違い一人に1台のPCはないから、自分でPCを買って持ってくる。必然的にノートPCになる。
自分が大学の時は入学当時はPCを持っていなかったから、大学の教室や自習室のPCで練習した。
3年ぐらいになって親のおさがりをもらったが、それでも専門的な研究は大学のPCだ。
そこへ行くと物価の安い=所得の安いベトナムでノートPCを買い、さらに破損や盗難のリスクが高い環境で毎回持ち運ぶというのは本当はやりたくないが仕方なくやっているに過ぎない。
一応スペックとしてはインターネットに接続でき、PDFが開け、JavaやSBTが動けばいいので最新モデルである必要はない。Windows7が動くぐらいのマシンでも使いようによってはなんとかなるだろう。
ただ、毎回持ち運ぶことを考えると、軽くてかつ頑丈なマシンというのが条件になってくる。
他の学生を見ると、薄型で値段の高そうなものを持ってきている者もいれば、相当重そうな、古くて壊れかけのものを持ってきている者もいる。
盗難のリスクを考え、学校ではできるだけ古いマシンを使いたいところではあるが、古いマシンの場合バッテリーが授業中にもたない可能性もでてくるので難しい所だ。

留学はなぜつらい?

ヤフー知恵袋や類似のQ&Aサイト、あるいは留学生のブログなどを見ていると、かなり大変で、精神的に追い込まれている人が散見される。
以前も当ブログにて留学と自殺の関連に関して述べたが、そもそもなぜ留学がつらいのか?

例えば青年海外協力隊などは途上国で周りに日本人が一人もいない状況で2年間ほぼ放置されるが、別につらくないし、精神的にはむしろ日本にいた時より安定していることが多い。
実際、任国に行けば外交特権を受けるし、配属際に行けば指導者や専門家として扱われ、頭を下げられる立場。しかも金もらえるし。一応JICAボランティアという名前だが、これは任国や配属先にとっては金をもらわずボランティアで働いているということであって、日本政府からは下手な大卒初任給以上の金をもらっている。そりゃそうでしょ。誰も行きたがらない所に日本人一人で2年間過ごすんだから。
とはいえ周りに日本人が誰もいないという環境は体験したことのない人にとっては不安に思えるかもしれないが、実際やってみるとやりたい放題、快適なことこの上ない。しかもこちらが頭を下げる場面は皆無であり、周りがこちらに頭を下げることがほとんど。仕事もほとんどなく毎日遊んで暮らせ、さらには十分な金がもらえる。交通費も家賃も無料。これで楽しくないはずがない。
一応名誉のためというか語弊があるので付け加えると、仕事がなくぶらぶらしていいということではない。これは任国ひいては配属先に日本のプレゼンスを示すというのが仕事というだけのことであり、つらい重労働や長時間拘束のようなものがないという意味である。よく言えば天皇陛下の慰問、悪く言えば客寄せパンダのようなもので、遠く日本から来た青年海外協力隊の人間がそこにいる、毎日配属先に顔を出している時点で十二分に職務果たされている。もちろんそこで具体的な作業をすればもっといいが、義務ではない。たまに配属先の人から作業を依頼されるが、単純作業はなく、全て日本の技術を使わなくては解決できないような高度なものばかりであり、こちらを高く見ているというのがうかがえる。ここで頼りになるところを見せれば、それこそ以後遊んでいても何も言われず、いるだけでありがたがられる存在になれる。ただ、新卒で青年海外協力隊になってしまった人などはお互いに不幸で、高度な仕事はできず軽視されるか雑用係止まりというケースも聞く。
中にはしたたかな人がいて、2年間配属先にはほとんど行かず、自宅で教員採用試験の勉強をひたすらやり、帰国後教員になった人もいる。これは配属先に行っていないので本当はアウトである。しかし、別に勤怠管理もないし、2年間配属先に行かなかったことは黙っていればばれないので本当に要領の良い人だと思った(隊員総会や報告会を欠席するとマークされるが)。はたから見れば協力隊から帰って学校の先生になったわけだ。「協力隊を活かして教員になった」とだけ言えば、協力隊の経験から教員を目指すことになったのかと聞き手が勝手に解釈するわけだし。
余談だが2018年度の隊員ハンドブックにおいては株取引の禁止と書いてあった。これなどなおさら黙っていればばれないことである。

で、留学だが、交通費、授業料や家賃など合わせ全部自己負担。また、留学生に頭を下げる人はおらず、学生が頭を下げる立場。こちらは金を払っている側なのに。
そうなると、青年海外協力隊とは雲泥の差というよりむしろ真逆の待遇であろう。
青年海外協力隊で得られる純利は200万円だが、その間の生活費が無料なので実質日本に住んでいれば所得600万円ぐらいに相当するだろう。
それが留学だと同じかそれ以上の金が吹っ飛ぶ。にも拘わらず快適さはゼロ。
協力隊から帰国しイギリスの大学院に留学し、1年で修士の学位を取り国連など国際公務員を目指すというのが定番のコースだが、実際イギリスの大学院に留学するのも楽ではないようだ。自殺までいくのは極端な場合かもしれないが、協力隊の快適さとくらべるとやってられないというのが実際のところだろう。
やはり留学というのは身分の不安定さもさながら、ストレスの多い環境だと思う。

ここでやっと話がベトナム大学院につながるが、留学ではなく、会社が休みの日を利用して通う社会人入学というのは非常においしいやり方だと思う。
留学生だと社会的立場も特権もないが、一応社会人ということで周りの扱いも違う。また、先生とも同年代ということで文句も言いやすい。
また、大学でストレスを受けることがあっても大学に行かない日の方がはるかに多いのでストレスをため続けるということは避けられる。
ただし当然、会社と大学の両立による時間的制約、忙しさはある。
まあ時間も自由でストレスの蓄積もないといううまい話というかいいとこどりはできないので、どっちを取るかということではあるが。

Nguyên lý ngôn ngữ lập trình恐怖のassignment3

いつもながら悪名高い等の不名誉な枕詞のつくNguyên lý ngôn ngữ lập trìnhにおいて、assignment3が課された。
やはり提出はいつもの通り特設サイトから。
http://www.cse.hcmut.edu.vn/onlinejudge/
前回のassignment2のように指示通りやるとエラーになるという始まる前から終わってる(教員側の)不手際はないようだ。
デフォルトでも提出すれば1点にはなる。

package mc.checker

import mc.parser._
import mc.utils._
import java.io.{File, PrintWriter}

//import mc.codegen.Val
import org.antlr.v4.runtime.ANTLRFileStream
import org.antlr.v4.runtime.CommonTokenStream
import org.antlr.v4.runtime.tree._

import scala.collection.JavaConverters._

class StaticChecker(ast:AST) extends BaseVisitor with Utils {
def check() = visit(ast,null)
//override def visitProgram(ast: Program, c: Any): Any = throw BreakNotInLoop
override def visitProgram(ast: Program, c: Any): Any = {
throw BreakNotInLoop // Testcase 14
}
}
Compiling
Running
Testing
Testcase 1: FAILED
Testcase 2: FAILED
Testcase 3: FAILED
Testcase 4: FAILED
Testcase 5: FAILED
Testcase 6: FAILED
Testcase 7: FAILED
Testcase 8: FAILED
Testcase 9: FAILED
Testcase 10: FAILED
Testcase 11: FAILED
Testcase 12: FAILED
Testcase 13: FAILED
Testcase 14: PASSED
Testcase 15: FAILED
Total: 1

これによるとTestcase 14を満たす。
残りのテストケースも満たせればよいのだが、この授業内容でそれできるようになるよりはらくだが針の穴を通る方がもっとやさしい。

Windows10更新と強制Homeを避ける方法

何もベトナム大学院に限った話ではないが、2018年4月にUbuntuの最新版18.04が出て、さらにWindows10も日付が変わって5月になるギリギリ直前に2018年4月版が出た。
ここでWindows10をクリーンインストールして授業に備えることになるが、2016年以降に製造されたPCの場合、インストール時にエディションが選べず、強制的にhomeが入る場合があり問題になる。もちろん強制的にProが入る場合もあるだろうがそれは問題にはならず、むしろ選択の手間が減って逆に便利である。
このからくりについてはBIOSにWindows10のエディション及びプロダクトキーが書かれているというものであり、下記リンクに詳しい。
Creators UpdateのISOファイルからWindows10 Proのインストールメディアを作成 - パソコンりかばり堂本舗
BIOSに書かれているエディションを変えることはできないようだが、インストールメディアを変えることができるようだ。
厳密には上記リンク参照だが、簡単に書くとインストールUSBメモリがHドライブで、余力があるSSDやHDDがEドライブだとしたら、コマンドプロンプト
DISM /Get-ImageInfo /ImageFile:H:\sources\install.esd
とし、Proが3番だったら、
DISM /Export-Image /SourceImageFile:H:\sources\install.esd /SourceIndex:3 /DestinationImageFile:E:\work\install.esd
と入力。
ここでEドライブにできたinstall.esdをUSBメモリに上書きするというもの。

ベトナムの大学の図書館ってどうよ?

ベトナムの大学と言ってもĐại Học Bách Khoa Tp.HCMでの話であるが、大学にある図書館がどうなっているかは気になるところである。
よく、アメリカやイギリスの大学では図書館が24時間開いていると留学者のブログで散見される。通常は夜閉まるにしても、試験期間だけは24時間というところもあるようだ。
で、この大学の図書館だが、24時間どころか、夜8時には閉まっている。具体的な閉館時間は分からないが、少なくとも明るい時間には開いていた。
さらに、日曜日は閉鎖。日曜日こそ授業と授業の間が空いていて図書館で時間をつぶすにはちょうどいい機会なのに、これは壊滅的。土曜日はよく分からないが時間のある時に除いてみたい。
日本の大学は…どうだったかな。自分が大学の時は図書館に行った記憶があまりない。そもそも図書館行くぐらいだったら部室行くし。
本を借りるにしても、県立図書館の方が広くて本の種類も多かったように記憶している。

話を戻して、この大学の図書館についてだが、そもそも外見から図書館とは分かりにくい。小さすぎるんだ。日本の大学の図書館を想像していると、てっきり備品置き場的なものと見間違うレベル。
日本にあるブックオフや万代書店とは比べ物にならないくらいの狭さ。
どちらかというと、ちょっと郊外のローソンぐらいに思っていた方がいい。
普段会社で働きながら通っている人なら、「うちの会社の方が広いんじゃ?」と思うかもしれない。
中に入ると図書貸し出しカウンターのようなものは見当たらず、みんな席に座って持参したノートPCを使っている。
図書館というよりコンビニ大の自習室ぐらいに思っておこう。
ただ、利用者のマナーはよく、騒いでいる奴はいないのだけが救いか。
あと、日本の大学の図書館のように異常なまでの検査がない。入退館は自由だ。一応入り口のロッカーに私物を入れるようになっているのと、盗むほど本もないというのもあるが。
ただ、学生証を提示しなくてもいいという意味では、部外者でも入れる。もっとも入ったところで何もすることがないから1分ほど室内を見学して帰ることになる。

2018/04/23追記
土曜日も閉鎖

Nguyên lý ngôn ngữ lập trình / Assignment 3

悪名高いとか物議を醸すとか不名誉な枕詞のつく同科目において、悪夢のAssignment 3が勃発した。
さすがに以前の約束通り、Assignment 2ができていなくても取り組めるようにはなっていた。

Assignment 3
version 1.1
After completing this assignment, you will be able to
• explain the principles how a compiler can check some semantic constraints such as
type compatibility, scope constraints,... and
• write a medium ( 300-500LOC) Scala program to implement that.
1 Specification
In this assignment, you are required to write a static checker for a program written in MC.
To complete this assignment, you need to:
• Read carefully the specification of MC language
• Download and unzip file assignment3.zip
• If you completed Assignment 2, you can skip this step. Otherwise (if you did not
complete Assignment 2), don’t worry, just follow these steps:
– download initial.zip, and unzip it, and change the folder initial into assign-
ment3; change current directory into assignment3
– remove folder src/main/mc/codegen, src/main/mc/checker and files AstUtils.scala,
TestChecker.scala, CheckerSuite.scala, TestCodeGen.scala and CodeGenSuite.scala
in folder src/test/scala/
– modify src/main/mc/Main.scala by commenting out 2 lines "import jasmin.Main"
and "import mc.codegen._"
– download upload.zip from Assignment 2, unzip it, and copy files into the corre-
sponding folders as described in Assignment 2.
• Make folder src/main/mc/checker and copy StaticCheck.scala and StaticError.scala
(from assignment3.zip) into this folder
• Copy TestChecker.scala and CheckerSuite.scala (from assignment3.zip) into src/test/scala
• Modify StaticCheck.scala to implement the static checker. Please fill in your id in
the headers of this file.
2
2 Static Checker
A static checker plays an important role in modern compilers. It checks in the compiling
time if a program conforms to the semantic constraints according to the language specifica-
tion. In this assignment, you are required to implement a static checker for MC language.
The input of the checker is in the AST of a MC program, i.e. the output of the assignment
2. The output of the checker is nothing if the checked input is correct, otherwise, an error
message is released and the static checker will stop immediately
For each semantics error, students should throw corresponding exception given in Stat-
icError.scala to make sure that it will be printed out the same as expected. Every test-case
has at most one kind of error. The semantics constraints required to check in this assign-
ment are as follows.
2.1 Redeclared Variable/Function/Parameter:
An identifier must be declared before used. However, the declaration must be unique in
its scope. Otherwise, the error messages “Redeclared : ”+ is released,
where is the kind of the identifier in the second declaration. The scope of an
identifier (variable, function, parameter) is informally described as in Section 10 of MC
specification.
2.2 Undeclared Identifier/Function:
The error message “Undeclared Identifier: ”+ is released when there is an iden-
tifier is used but its declaration cannot be found. The identifier can be a variable or
parameter. “Undeclared Function: ”+ is released in similar situation for
a function invocation.
2.3 Type Mismatch In Statement:
A statement must conform the corresponding type rules for statements, otherwise the error
message “Type Mismatch In Statement: ”+ is released.
The type rules for statements are as follows:

  • The type of a conditional expression in an if statement must be boolean.
  • The type of expression 1 and expression 3 in a for statement must be integer while

the type of expression 2 is boolean.

  • The type of condition expression in do while statement must be boolean.
  • For a return statement, if the return type of the enclosed function is void, the

expression in the return statement must be empty. Otherwise, the type of the return
3
expression must be equal to or be coerced to the return type of the function. An
exception is an array pointer or array can be returned to an array pointer, i.e., the
type of return expression can be in array pointer or array type while the return type
of the enclosed function is in array pointer type with the same element type.
2.4 Type Mismatch In Expression:
An expression must conform the type rules for expressions, otherwise the error message
“Type Mismatch In Expression: ”+ is released.
The type rules for expression are as follows:

  • For an array subcripting E1[E2], E1 must be in array type or array pointer type and

E2 must be integer.

  • For a binary and unary expression, the type rules are described in the MC specifica-

tion.

  • For an assignment expression, the left-hand side can be in any type except void, array

pointer type and array type. The right- hand side (RHS) is either in the same type
as that of the LHS or in the type that can coerce to the LHS type. In MC, just the
integer can coerce to the float.

  • For a function call (), the number of the actual parameters

must be the same as that of the formal parameters of the corresponding function.
The rule for an assignment is applied to parameter passing where a formal parameter
is considered as the LHS and the corresponding actual parameter is the RHS. An
exception is an array pointer or array can be passed to an array pointer, i.e., the
actual parameter can be in array pointer or array type while the corresponding formal
parameter is in array pointer type with the same element type.
The three following errors are required just for the students in gifted class (KSTN):
2.5 Function not return:
A function that does not return void must return something in every its execution paths.
If there exists one path where there is nothing returned, the error message "Function Not
Return: " will be released.
2.6 Break/Continue not in loop:
A break/continue statement must be inside directly or indirectly a loop otherwise the error
message "Break/Continue Not In Loop" will be released.
4
2.7 Unreachable statement:
An unreachable statement is a statement in a function which the control flow cannot reach.
For example, the statement after a return statement is an unreachable statement. The value
of an expression is ignored when determining an unreachable statement. For instance, the
stmt in if (false) stmt is reachable as the value of the condition expression is ignored.
The error message "Unreachable statement: "+ will be released when the
is an unreachable statement.
2.8 No Entry Point:
There must be a function void main () somewhere in a MC program. Otherwise, the error
message "No entry point" is released.
2.9 Unreachable function:
A function, except main function, must be invoked by another function, otherwise, the
error message "Unreachable function: " is released.
3 Submissions
This assignment requires you submit 2 files: StaticCheck.scala containing class Static-
Checker with the entry method check, and CheckerSuite.scala containing 100 testcases.
The deadline is announced in course website and in www.cse.hcmut.edu.vn/onlinejudge.
If the deadlines in these places are different, the deadline in www.cse.hcmut.edu.vn/onlinejudege
is applied.
4 Plagiarism
• You must complete the assignment by yourself and do not let your work seen by
someone else.
If you violate any requirement, you will be punished by the university rule for plagiarism.

Nguyên lý ngôn ngữ lập trình 小テスト2018/04/14

Đã bắt đầu vào lúc Saturday, 14 April 2018, 2:32 PM
Tình trạng Đã hoàn thành
Hoàn thành vào lúc Saturday, 14 April 2018, 2:45 PM
Thời gian thực hiện 13 phút 36 giây
Điểm 3,38 của 10,00 (34%)

Câu hỏi 1

Không chính xác
Điểm -0,33 của 1,00
Cờ câu hỏi

Nội dung câu hỏi

 

Cho biết trong đoạn mã C++ sau, đối tượng nào có nhiều tên và những tên này là gì?

int *p = new int;

int *&q = p;


 

Chọn một:
 Không chính xác

Thông tin phản hồi

Câu hỏi 2

Không chính xác
Điểm 0,00 của 1,00
Cờ câu hỏi

Nội dung câu hỏi

 

Cho đoạn mã C++ sau, hãy cho biết các đối tượng được cấp phát trong các vùng nhớ nào?

int * m;

int * foo(int x) {

  static int y;

  int * z = new int;

   switch x {

        case 1: return &y;

        case 2: return &x;

        case 3: return z;

        case 4: return m;

   }

}


 

new int

 Không chính xác

z

 Không chính xác

Thông tin phản hồi

Câu hỏi 3

Chính xác
Điểm 1,00 của 1,00
Cờ câu hỏi

Nội dung câu hỏi

Cho đoạn mã C++ sau, hãy cho biết khi gọi hàm foo với thông số là 3 thì sẽ có lỗi gì (trong các lỗi tham chiếu treo, garbage hoặc alias) xảy ra?

int * m;

int * foo(int x) {

  static int y;

  int * z = new int;

   switch x {

        case 1: return &y;

        case 2: return &x;

        case 3: return z;

        case 4: return m;

   }

}

 

Chọn một:
 Chính xác

Thông tin phản hồi

Câu hỏi 4

Chính xác
Điểm 1,00 của 1,00
Cờ câu hỏi

Nội dung câu hỏi

Cho phát biểu C++ sau:

x = x + y * 10;

Trong biểu thức bên vế phải, phép nhân * được tính toán trước phép +; ràng buộc này xảy ra vào thời gian nào?

Chọn một:
 Chính xác

Thông tin phản hồi

Câu hỏi 5

Không chính xác
Điểm 0,00 của 1,00
Cờ câu hỏi

Nội dung câu hỏi

 

Cho đoạn mã C++ sau, hãy chọn các phát biểu ĐÚNG về thời gian sống (object lifetime) của các đối tượng?

int * m;

int * foo(int x) {

  static int y;

  int * z = new int;

   switch x {

        case 1: return &y;

        case 2: return &x;

        case 3: return z;

        case 4: return m;

   }

}


 

Chọn một hoặc nhiều hơn:
 Không chính xác

Thông tin phản hồi

Câu hỏi 6

Đúng một phần
Điểm 0,40 của 1,00
Cờ câu hỏi

Nội dung câu hỏi

Cho đoạn chương trình sau viết trên một ngôn ngữ cấu trúc khối tựa Pascal:

var x,y:integer; // line 1

   procedure foo(x:real) //line 2

   var z: integer; // line 3

   begin  ....  end

  procedure foo1(y:integer) // line 4

  var z: real;  // line 5

  begin ... end

begin  ... end

Hãy cho biết các khai báo có hiệu lực trong procedure foo

Chọn một hoặc nhiều hơn:
 Chính xác
 Chính xác

Thông tin phản hồi

Câu hỏi 7

Đúng một phần
Điểm 0,40 của 1,00
Cờ câu hỏi

Nội dung câu hỏi

Cho đoạn chương trình sau viết trên một ngôn ngữ cấu trúc khối tựa Pascal:

var x,y:integer; // line 1

   procedure foo(x:real) //line 2

   var z: integer; // line 3

   begin  ....  end

  procedure foo1(y:integer) // line 4

  var z: real;  // line 5

  begin ... end

begin  ... end

Hãy cho biết các khai báo có hiệu lực trong procedure foo1

Chọn một hoặc nhiều hơn:
 Chính xác
 Chính xác

Thông tin phản hồi

Câu hỏi 8

Đúng một phần
Điểm 0,67 của 1,00
Cờ câu hỏi

Nội dung câu hỏi

Cho đoạn chương trình sau viết trên một ngôn ngữ cấu trúc khối tựa Pascal:

var x,y:integer; // line 1

   procedure foo(x:real) //line 2

   var z: integer; // line 3

   begin  ....  end

  procedure foo1(y:integer) // line 4

  var z: real;  // line 5

  begin ... end

begin  ... end

Giả sử chương trình chạy theo trình tự: main gọi foo, foo gọi đệ qui foo, foo gọi foo1 với các đối tượng được cấp phát trên các bảng ghi hoạt động như sau:

name

Hãy cho biết môi trường tham khảo động của foo1 có chứa các đối tượng nào?

Chọn một hoặc nhiều hơn:
 Chính xác
 Chính xác

Thông tin phản hồi

Câu hỏi 9

Đúng một phần
Điểm 0,25 của 1,00
Cờ câu hỏi

Nội dung câu hỏi

Cho đoạn chương trình sau viết trên một ngôn ngữ cấu trúc khối tựa Pascal:

var a,b,c,d: integer; // line 1

  procedure sub0 

    var c: integer; // line 2

    begin .. end;

  procedure sub1(a:real) //line 3

var d:real; //line 4

procedure sub2(b:char)  //line 5

begin ... end

  begin ... end

begin ... end

Giả sử chương trình chạy theo trình tự: main gọi sub1, sub1 gọi sub2, sub2 gọi sub0 với các đối tượng được cấp phát trên các bảng ghi hoạt động như sau:

name

Hãy cho biết môi trường tham khảo động của sub0 có chứa các đối tượng nào?

Chọn một hoặc nhiều hơn:
 Chính xác

Thông tin phản hồi

Câu hỏi 10

Không chính xác
Điểm 0,00 của 1,00
Cờ câu hỏi

Nội dung câu hỏi

Cho đoạn chương trình sau viết trên một ngôn ngữ tầm vực động:

program main;

var a,b,c,d: integer; // line 1

begin ... end

  procedure sub0 

    var c: integer; // line 2

    begin .. end;

  procedure sub1(a:real) //line 3

var c:real; //line 4

  begin ... end

  procedure sub2(d:char)  //line 5

begin ... end

Giả sử chương trình chạy theo trình tự: main gọi sub1, sub1 gọi sub2, sub2 gọi sub0 với các đối tượng được cấp phát trên các bảng ghi hoạt động như sau:

name 2

Hãy cho biết môi trường tham khảo động của sub0 có chứa các đối tượng nào?

Chọn một hoặc nhiều hơn:
 Không chính xác
 Không chính xác
 Chính xác

Thông tin phản hồi

Nguyên lý ngôn ngữ lập trìnhの進め方に思う

何かと物議をかもす悪名高い必修科目のNguyên lý ngôn ngữ lập trìnhであるが、そもそもの問題がどこにあるのか。
まず、教え方、教える人にはこの3パターンがあるように思う。
1. 難しいことを簡単に教える=人財=プラスになる、いい授業
2. 難しいことを難しく教える=人存=プラマイゼロ、受けても受けなくても同じ
3. 簡単なことを難しく教える=人罪=マイナス、むしろ授業を受けないほうが理解できる
できれば教える人間には1であってほしいが、どう贔屓目に見ても2ではなく、3のように思える。
また、本来プログラミング言語とは楽しいものだ。
自分の作ったものが思い通りに動く楽しさ。
が、同科目にはそのような楽しさが微塵も感じられず、ただひたすら苦行の時間を過ごすだけ。
先日からドワンゴscala攻略サイトに載っている通りのソースコードを張り付け、一部変数の値を変えたりして実行してみたのだが、やってみるとscalaは面白いものだなと分かる。
また、記述とか妙な書き方をするなと思っていたら、いわゆる{}(中かっこ)が省略できるということに気付く。
さらに、return文を書かなくても戻り値を渡せるというのもわかる。
途中、Listなる概念も出てきたが、その辺は適宜ぐぐれば進められる。
で、それでいて課題が分からない要因としては単なるscalaのコーディングではなく、ANTLRなる分野の知識が要求されるということも分かった。ANTLRとはプログラミング言語でもデータベースでもWebサーバでもなく、なんだかよく分からない概念のようだというところまでは分かった。
参考サイトとしてはこのようなものが見つかった。
ANTLRのお勉強 | threecourse's memo
ANTLRは独自のプログラミング言語の分析をする仕組みということのようだ。
確かに同科目ではMC(Micro CあるいはMini C)なる独自のプログラミング言語の仕様書が与えられていた。

結局、ANTLRなるものを実現するにはjavaを使うことが多いが、同科目においてはscalaというプログラミング言語を利用しているということなのだろう。
つまり、MC(Micro CあるいはMini C)なる独自のプログラミング言語を分析するためにANTLRという技術が必要、その実装がscalaということなのだろう。
これを初回授業において明記しておけば混乱がないように思えるが、授業開始から2か月近く経ってからぼんやりと気付き始めたということである。
もし自分が同じ授業を展開するとしたらどうするか?
1. 本科目はANTLRというものを扱う。ANTLRの何たるかを説明する。
2. ANTLRを実現するには一般的にはJavaを使うが、本科目ではscalaを使う。つまり、scalaの習得も本科目の目的となる。scala習得のサイトを紹介する。
3. ANTLRで分析するためにMC(Micro CあるいはMini C)なる独自のプログラミング言語を準備する。
これを初回において重点的に説明することだ。
この説明が何もなく、ただ「sbtをダウンロードしろ」だけ。
そもそもsbtって何だ?何の説明もなくよく分からないままに1か月が過ぎ、この授業ではscalaというプログラミング言語を使っているということに気付く。
何のことはない、scalaというプログラミング言語を便利に使うためのソフトがsbtということになる。
箇条書きにしてみれば決して難しいわけではなく、むしろやることは明確(技術的にはともかく)と思えるのだが、分かりやすく説明するというのは本当に大事だなと改めて思った。
やっていることとしてはこのサイトが参考になる。拡張子g4だし。
iwsttty.hatenablog.com

が、あいにくともう中間試験も課題2個の提出期限も過ぎてしまった。
時間を巻き戻すことができない以上、次善の策は半年後あるいは1年後の再履修で初回からPC操作一つ一つに至るまで完璧にトレースするぐらいであるが、それでもこの予備知識の有無で授業の理解度が全く違ってくると思う。
幸いこの授業は数年前から同じことばかり繰り返しやっているので、再履修になっても内容が変わらないのが救いだ。

実は後日談があり、ドワンゴ公式サイトにあるコンソール命令を使っていたら、周囲の席の学生から、どうやったのか教えてほしいと言われた。
つまり、授業ではsbt→runしか教えていないということになる。
数回あった小テストではコンソールを知らないといちいちmain関数を作ってそこに命令を書かないといけないのだが、彼らの小テストの結果はどのようなものであったろうか。

補足だが、今の授業がまさにこれ。
学校は簡単なことを難しく教えてくれるところである – アゴラ
>なんにも知らないで授業を受ける子どもには、いったい何を話しているのかすらもわからない。逆に「すでに知っている子ども」には「なにをあたりまえのことを」となる。

初見学生にはいったい何を話しているのかすらもわからない。
逆に再履修社には「なにをあたりまえのことを」となる。