Programming
Algorithm
講師 石川敢也
2
このクラスの目的
プログラミングの基本となるアルゴリズムを理解して、 フローチャートの書き方を身につけるクラスです。
一方的に講義を聞いているだけの科目ではありません。
講義の進め方
アルゴリズムを自分で考えながら、基礎となるパターン、考え方を確実に習得していきます。講義と意見交換を 交互に繰り返して、無理のないように進行していきます。
成績評価
シラバスを参照してください。
Guidance
講師紹介
石川 敢也 (いしかわ かんや)
ラクパス 代表
法政大学大学院 イノベーション・マネジメント研究科 特任講師。
元ISO/IEC 27001 審査員補、読売・日本テレビ文化センター 講師。
著書「情報処理教科書 iパスクイズ222 ITパスポート試験攻略の書」(翔泳
社)、共著 「情報処理教科書 情報セキュリティマネジメント 要点整理&予想
問題集」(翔泳社)、「インターネットから子供を守る!」、「初級シスアド対策
問題集」(ローカス)、「Excel&Word完全解決!」(宝島)など。
3
「プログラミング」を、 小学生にわかるように説明してください。
プログラミングとは?
4
プログラミング
コンピュータプログラムを作成することにより、 人間の意図した処理を行うようにコンピュータに 指示を与える行為。
プログラミングの過程で、ソースコードを記述することをコーディングという。
プログラミングをする人をプログラマという。
コンピュータプログラムを記述するための形式言語を プログラミング言語という。多くの種類がある。
Programming
5
Wikipediaより抜粋・編集・修正して引用
プログラミング言語(プログラム言語) プログラミング言語は、情報を組織し処理するタスクについての理解を容易にし、アルゴリズムを正確に表現することができる。
数行の短いスクリプトから、数百人のプログラマが書く
巨大なシステムまで、様々なプログラムがある。
プログラミング言語の特徴
人間の会話と比較して、正確性と完全性の要求性が
非常に高い。
Programming Language
6
Wikipediaより抜粋・編集・修正して引用
スクリプト言語 ソースコードをその場で機械語に翻訳する。
コンパイラ言語に比べて、習得が容易と言われている。
コードをすぐに実行できる。
代表的な言語
JavaScript
PHP
Ruby
Python
Perl
Scripting Language
7
コンパイラ言語 ソースコードを事前にコンパイルしてから動作する。
コンパイルとは、人間の言葉に近い高水準言語で
書かれたソースコードを、コンピュータが実行できる
オブジェクトコードに変換する作業。
コンパイラにより変換されたプログラムは、リンカに
よってリンクされることで、実行可能になる。
代表的な言語
Java
C
C++
C#
Compiler Language
8
C
多くのプログラム言語に影響を与えている言語。
関数の集合体なので全体の構造を把握しやすい。
メモリーや周辺機器等を簡単な方法で直接制御できる。
C++やVRゲーム開発にも使われるC#なども。
Java言語
仮想マシンで動く。高い汎用性。オブジェクト指向。
学びやすくライブラリの数が膨大。
Visual Basic
Microsoft offeceに搭載されている。
Windowsのみで動作。
代表的なプログラミング言語(1)
9
JavaScript
オブジェクト指向言語でわかりやすい文法。
Webブラウザで動作する可能。スマートフォンも。
Webエンジニアには欠かせないスクリプト言語。
Python
開発シェアが急上昇しているスクリプト言語。
AIやSNSなどの開発にも使われている。
Webアプリから人工知能の開発まで応用できる。
PHP
サーバーで動作するスクリプト言語。
HTMLの中に埋め込んでユーザ管理などで利用。
他のスクリプト言語に比べて容易。データーベースも。
代表的なプログラミング言語(2)
10
R
ビッグデータの統計データ分析に使う。
利用が急拡大しているスクリプト言語。
Ruby on Rails(RoR)
オープンソースのWebアプリケーションフレームワーク。
他のフレームワークより少ないコードで比較的、
容易に開発できるよう考慮されている。
まつもとゆきひろ氏が開発したRubyで書かれている。
HTML /CSS
HTMLは、Webページの要素や構造を定義する言語。
CSSは、Webページのデザインを定義する言語。
代表的なプログラミング言語(3)
11
CASL/CASL II
情報処理技術者試験におけるプログラミング能力試験のために、CAP-Xの後継として策定されたアセンブリ言語。
動作する(という設定)なのは、学習用に単純化された
仮想計算機で、「COMET」と呼ばれています。
2001年に基本情報技術者試験がスタートするときに、
仕様の改訂が行われて「CASL II」になりました。
アセンブリ言語(Assembler Language)
プログラム可能な機器を動作させるための機械語を、
人間にわかりやすい形で記述する、低水準言語。
「Assemble」は「結合する、組み立てる」という意味です。
学習用のプログラミング言語
12
Progate https://prog-8.com/
無料で始められる、初心者向け学習サイト。
ドットインストール https://dotinstall.com/
3分動画で学ぶプログラミング学習サイト。
paizaラーニング https://paiza.jp/
Java、Python、PHPなどのプログラミング言語に対応。
CodeMonkey https://codemonkey.jp/
ゲームで学ぶプログラミング学習サイト。
オンラインプログラミング学習サービス
13
準備 テキストエディタ(「メモ帳」など)を起動しよう。
後でブラウザ(IE、Chrome、Firefoxなど)も使います。
今からの実習に必要な用語 HTML
タグ
絶対パスと相対パス
とりあえず、少しだけやってみましょう
14
タグ HTMLでマークアップのための使う命令。
< >で囲うことで、コンテンツの本文と区別する。
命令を開始する「開始タグ」と命令を終える「終了タグ」がある。
<〇〇〇〇> 開始タグ ~ </〇〇〇〇> 終了タグ
終了タグは省略可能または記述しないもの、逆に、
省略できない(省略してはいけない)ものがある。
例えば<title>はWebページのタイトルを指定するタグ。
タグの構造
15
<title> ブラウザのタブや、ブックマークで表示されるタイトルを指定。
<title>HTMLを学習中</title>
Webページのタイトルを書きます
16
<br>は改行を命令するタグです。
<title>HTMLを学習中</title>
こんにちは。<br>
私は〇〇〇〇〇です。<br>
よろしくお願いします。
コンテンツの文章を書きます
17
HTMLの形式として保存するには、 拡張子を「.html」にして保存します。
.(ドット、ピリオド)を忘れないように。
ファイル名.html で、デスクトップに保存。
HTMLとして保存してみましょう
18
Internet ExplorerやChromeなどのブラウザで保存したファイルを開いてみましょう。
ブラウザで表示してみましょう
19
<h1>は、続く文章を見出しとして定義するタグで、 終了タグ</h1> と一緒に、 <h1> ~ </h1>の形で使います。
<title>HTMLを学習中</title>
<h1>こんにちは。</h1><br>
私は〇〇〇〇〇です。<br>
よろしくお願いします。
<h1>を<h2>に変えると、どうなりますか?
「こんにちは」を見出しに指定しよう
20
<font color=“red”>~ </font>は、~の部分を 赤で表示する命令です。 “red”の部分を16進数“ #ff0000 ”でも指定できます。
<title>HTMLを学習中</title>
<h1>こんにちは。</h1><br>
私は<font color="red">〇〇〇〇〇</font>です。<br>
よろしくお願いします。
青はblue(#0000f)、緑はgreen(#008000)です。
いろいろな色を試してみましょう。
文字の色を変えてみましょう
21
例えば、ラクパスのWebサイトへのリンクは、 <a href=“http://rakupass.com/”>と書きます。
このタグには終了タグはありません。
<title>HTMLを学習中</title>
<h1>こんにちは。</h1><br>
私は<font color="red">〇〇〇〇〇</font>です。<br>
よろしくお願いします。<br>
<a href=“http://rakupass.com/”>石川先生のサイトです。</a>
リンクをつけてみましょう
22
<ul>
<li>月曜日</li>
<li>火曜日</li>
<li>水曜日</li>
<li>木曜日</li>
<li>金曜日</li>
<li>土曜日</li>
<li>次は何曜日ですか?</li>
</ul>
箇条書きもできます
23
できましたか?
24
今日はこのくらいにしておきましょう。 続きは「HTML」のクラスで学びます。
「アルゴリズム」を、 おじいちゃん、おばあちゃんに説明してください。
アルゴリズムとは?
25
アルゴリズム 数学、コンピューティング、言語学などの分野において、問題を解くための手順を定式化した形で表現したもの。
「算法」や「解法」などと訳されることもある。
「問題」は、その「解」を持っているが、アルゴリズムは 正しくその解を得るための具体的手順および根拠を 与える。
多くの場合において効率性が重要となる。
コンピュータにアルゴリズムをソフトウェア的に 実装するものがコンピュータプログラムである。
人間より速く大量に計算ができるのがコンピュータの強みであるが、計算が正しく効率的であるためには、 正しく効率的なアルゴリズムに基づいたプログラムが必要。
Algorithm
26 Wikipediaより抜粋・編集・修正して引用
次の質問です
27
バケツA には5リットルの水が入る。
バケツBは3リットルの水が入る。
このバケツで1リットルの水を計ってください。
A 容量5ℓ B 3ℓ
命令 バケツA(容量5ℓ) バケツB(容量3ℓ)
1 Aに水を入れる 5 0
2 Aの水をBに移動 2 3
3 Bの水を捨てる 2 0
4 Aの水をBに移動 0 2
5 Aに水を入れる 5 2
6 Aの水をBに移動 4 3
7 Bの水を捨てる 4 0
8 Aの水をBに移動 1 3
解答(1)
28
命令 バケツA(容量5ℓ) バケツB(容量3ℓ)
1 Bに水を入れる 0 3
2 Bの水をAに移動 3 0
3 Bに水を入れる 3 3
4 Bの水をAに移動 5 1
解答(2)
29
解答(1)と解答(2)、どちらが効率が良いでしょうか?
3組の夫婦がいて川を渡ろうとしています。
しかし、2人乗りの小船が一隻しかありません。
夫はやきもち焼きなので、妻は夫がいない
ときは、他の男と一緒の船には乗りません。
さて、この3組の夫婦が川を渡るには、
どうすればいいでしょうか?
もう1問やってみましょう
30
3組の夫婦を「夫A、妻a」、「夫B、妻b」、「夫C、妻c」と呼びます。
Aとaが渡ります
aを降ろして、Aが戻ります
bとcが渡ります
bを降ろしてcが戻ります
AとBが渡ります
Aとaが戻ります
AとCが渡ります
bが戻ります
aとcが渡ります
cが戻ります
bとcが渡れば完了です
解答
31
丸を一つ描いてください。
丸の下に三角をひとつ描いてください。
三角の左右に、斜めにした
細長い長方形をひとつづつ、
三角の下にも二つ描いてください。
何に見えますか?
紙とペンを用意してください
32
どのように伝えれば正しい絵が描けたのでしょうか?
解答例
33
鍋に油を引いてコンロの火をつける。
タマネギを切って鍋で炒める。
肉を切って鍋で炒める。
じゃがいもを切って鍋で炒める。
鍋に水を入れて煮る。
カレーのルーを鍋に入れる。
さらに煮込む。
カレーライスの作り方を教えてください
34
35
「カレーの作り方」をフローチャートにしてみましょう
フローチャートの書き方(1)
36
端子(開始・終了)
処理
判断
矢印・順序
線・処理の流れ
準備
フローチャートの書き方(2)
37
表示
ループ始端
ループ終端
データ
書類・帳票
入力
フローチャートの原則
最初と最後は端子を書く
上から下へ流れる(逆行するときは矢印で繋ぐ)
左から右へ流れる(逆行するときは矢印で繋ぐ)
線や矢印は交差しない(重ならない)
記号の中には内容が分かる文字や数式を書く
流れの前後を定義するときは矢印を使う
フローチャートを書くときのルール
38
カレーは無事にできましたか?
39
順次構造 命令を順番に実行・処理していく。
Sequence
40
選択構造 処理が条件によって判断されて分岐する。
Selection
41
反復構造(1) 前判定 条件が成立していれば繰り返し実行する。
継続条件/終了条件
42
反復構造(2) 後判定 条件が成立していれば繰り返し実行する。
後判定の繰り返し
43
フローチャートに「タマネギが飴色になったら水を入れる」を追加しよう
44
家から教室に来るまでの手順をフローチャートにしてください
45
構造化チャート
流れ図の他にもアルゴリズムを表現する手法がある。
順次、選択、反復の構造のみで表現する図法のこと。
PAD(Problem Analysis Diagram)
日立製作所で考案された構造化チャート。
NSチャート(Nassi Shneiderman Chart)
線や矢印ではなく四角の枠を組み合わせて表現する。
Structured Chart
46
ソート
不規則なデータを一定の規則に従って整列させる作業。
昇順(Ascending Order)
値の小さい方から大きい方へ順に並べる。
降順(Descending order)
値を大きい方から小さい方へ順に並べる。
Sort
47
挿入ソート(基本挿入法)
先頭の要素をソート(整列)済みの要素と考えて、この配列に
次の要素を適切な位置に挿入する。
ソート済み要素の次に位置する要素を、整列済みである
配列の適切な位置に追加してソートを完成させていく。
ヒープソート(Heap Sort)
リストから要素を取り出し、順に整列済みリストに追加する。
ヒープは、子要素は親要素より常に大きいか等しい木構造。
Insertion Sort
48
バブルソート(隣接交換法、基本交換法)
隣接する要素と値の大きさを比較して、
順序が逆の場合には、隣の要素と入れ替えを行う。
選択ソート(Selection Sort)
最大・最小値の要素を探索して入れ替えを行う。
この他にも、マージソート、クイックソート、
シェルソートなど、さまざまなアルゴリズムがある。
Bubble Sort
49
二分探索(にぶんたんさく)
(1)順番にデータを並び替える(ソートする)
(1)目的の値と中央の値との大・小を比較
(2)目的値が大・小のどちらかを判断
(3)目的の値にたどり着くまで繰り返す
Binary Search
50
「はい」か「いいえ」で答えられる質問を、4回だけすることができます。
20 歳以上 36 歳未満である田中さんの
年齢を当ててください。
二分探索クイズ
51
「数独」をやってみよう!
9×9のセルに1から9までの数字を書くパズル
ルールは下記の三つだけ
一列に同じ数字を2回使ってはいけない
一行で同じ数字を2回使ってはいけない
1ブロックで同じ数字2回を使ってはいけない
Number Place
52
数独にチャレンジ!
53
構造化チャート
流れ図の他にアルゴリズムを表現する手法。
PAD(Problem Analysis Diagram)
日立製作所で考案された構造化チャート。
NSチャート(Nassi Shneiderman chart)
線や矢印ではなく四角の枠を組み合わせて表現する。
構造化チャート
54
ソフトウェア開発技術者試験 〔2005年春期 午前問題 問40 改題〕
55
構造化チャートに関する記述として、最も適切なものはどれか。
ア ジャンプを表現する方法を持たず、モジュール内の論理構造を
表現するのに適した図式である。
イ システム分析・設計に用いられる図式であり、システムの
状態の変化を記述するのに適している。
ウ データの流れを表すのが容易な図式であるが、処理の手順を
表しにくい。
エ モジュール構造図を示す図式目次と、各モジュールの機能を
入力・処理・出力の形式で記述した図であり、構造化手法の特徴
であるトップダウン設計に向いている。
解答 ア
構造化チャートは、順次、選択、反復を表現する図です。
矢印を使わないので、流れをジャンプさせることはできません。
お疲れさまでした!
56