...

2015年度 プログラミング入門 第1回講義

by user

on
Category: Documents
19

views

Report

Comments

Transcript

2015年度 プログラミング入門 第1回講義
Copyright (C) 1999 - 2015 by Programming-0 Group
Prog-0 2015 Lec01-3
4/10
4/17
4/24
5/1
5/15
5/22
5/29
6/5
6/12
6/19
6/26
7/3
7/10
7/17
7/24
5/8(金)は水曜時間割
1 コンピュータとは~Helloの表示
2 変数・入出力・演算
3 様々な型・型変換
4 選択(分岐) – if、switch/case 5 ループ(その1) – while 6 ループ(その2) – for –
7 1次元配列
8 フローチャート
9 中間試験
10 スペシャルレクチャ
11 2次元配列
12 2次元配列の復習と応用
13 関数(その1)
14 関数(その1)
15総復習・良いプログラミングのスタイル
Copyright (C) 1999 - 2015 by Programming-0 Group
プログラミング入門の授業予定
Prog-0 2015 Lec01-1
下に置いてありますから、各自自分のディレクトリにコピーして、
コンパイル・実行してみてください
マークのあるサンプルプログラムは
/home/course/prog0/public_html/2015/lec/source/
項目の後の()内は、その
項目の先頭ページを示し
ています。
また項目の先頭ページは
タイトルの色が薄青(この
色)になっています。
授業情報(2)
コンピュータとは(9)
コンピュータ言語と実行(15)
Helloを表示するプログラム(21)
プログラミング入門
第1回講義
2015年度
授業担当
大津山
久田
出村
クラス
C1, 2
C3, 4
C5, 6
中里(C5)
北里(C3)
大藤(C1)
演習担当
平田(C6)
三瓶(C4)
小川(C2)
Copyright (C) 1999 - 2015 by Programming-0 Group
Prog-0 2015 Lec01-4
アルファベットの
Lの小文字
数字の1
アルファベットの
Lの小文字
Copyright (C) 1999 - 2015 by Programming-0 Group
学外アクセス:上記学内アクセスより最大1時間程度の更新の遅れがあるため
学内では必ず上記学内アクセスURLを使用すること。なお、成績は学内でしか見
られない。
http://www.u-aizu.ac.jp/course/prog0/
学内アクセス
file:///home/course/prog0/public_html/2015/welcome.html
演習課題・電子資料
詳しくはシラバスを参照して下さい
良く知っている人は講義・演習を免除される場合があります
⇨ スキップテストを実施します(P7に詳細)
C言語のプログラミング技術の基礎、良いプログラムとはどんなものか?
コンピュータとは何なのか? プログラミングとは何なのか?
プログラミング入門 では何を学ぶのか?
Prog-0 2015 Lec01-2
質問する時には学籍番号と氏名を必ず名乗って下さい
[email protected](教員とTA/SA) 演習の質問
授業・演習時間以外の質問はメールにて行なってください
[email protected] (教員) 授業の質問等
演習時には演習補助として大学院生のTAと、学部生のSAがいます。
分からない所はどんどん質問して下さい。
TA(Teaching Assistant)/SA(Student Assistant)
教員
スタッフ紹介
1年後期
2年前期
2年後期
C++プログラミング
Copyright (C) 1999 - 2015 by Programming-0 Group
JAVA
アルゴリズムと
プログラミング データ構造
Prog-0 2015 Lec01-7
テスト内容:プログラム作成(ペーパーテスト)
持ち込む事が出来るもの:筆記用具のみ
Copyright (C) 1999 - 2015 by Programming-0 Group
この日時にしか実施しませんから、授業や用事があり参加できない者は上記skipの
認定は行いません。
日時・場所:4月9日(木) 5限 場所:未定
スキップテストの開催要項
skip(2):講義出席(クイズ)・演習(課題提出)が免除されます。
skip(1):講義出席(クイズ)が免除されます。演習課題の提出は必要です。
但し、スキップ認定されても中間・期末試験は必ず受けねばなりません。
単位取得ならびに成績がAになる保証もありません。
免除された時間を生かし、プログラミングスキルの更なる向上を目指して下さい。
テスト成績によって以下の2種類の認定を行います。
充分C言語に関する知識がある人に対して、授業・演習を免除す
るスキップテストを行います。(希望者のみ)
スキップテストに関して
Prog-0 2015 Lec01-5
1年前期
プログラミング入門
プログラミングC
赤矢印は先修条件
・JAVAプログラミング、
・アルゴリズムとデータ構造、
・C++プログラミング
の3つのコースは、先修条件として、プロ
グラミング入門又は後期プログラミングC
が必要です。
プログラミング関連ロードマップ
難しさ
Prog-0 2015 Lec01-8
授業の前に..
Prog-0 2015 Lec01-6
1
Copyright (C) 1999 - 2015 by Programming-0 Group
授業をしっかり聞いて、自分のハンドアウトに
記入し、完成させてください
ハンドアウトは何箇所か意図的に伏字にな
っています。言わば 未完成 です。
予習・復習時には必ず教科書も参照して
下さい(ハンドアウトには必要に応じて
教科書のページを記載してあります)
全てを網羅している訳ではありません
ハンドアウト(この書籍の事)は教科書の
エッセンスです。
聞きなれない、知らない言葉もどんどん
質問してください。
授業中、つい専門用語(業界?用語)を
使ってしまう事があるかもしれません。
分からない事はその時・その場で
質問してください。
人間の記憶はそう長くは持ちません。
Copyright (C) 1999 - 2015 by Programming-0 Group
なお、事故・病欠・忌引き等避けられないもの以外の公休(大会参加など)は
授業・演習ともに欠席扱いとします。但し演習問題は事前に提出が可能なので、
2週間前までに相談してください。
中間試験または期末試験に欠席した
授業または演習の出席回数が全体の2/3に満たない
以下のいずれか一つにでも該当する者には単位を与えません
授業と演習が融合した内容の回があります
課題作成(30点) 一部課題の提出は演習時間内が締め切りとなります
演習(週2コマ) ー 詳しくは演習時に説明があります
期末試験(40点)
中間試験(20点)
クイズ提出は出席確認を兼ねます。また遅刻は欠席扱いになります。
クイズ(10点) 毎週授業中に15分のクイズを行う。内容は前回の復習。
コースは以下のような構成で行われ、それぞれ評価を行います。カッコ内
は配点です(合計100点)
授業(週1コマ)
成績配点と出席について
ブラックボックス
3
日付、時間の表示
ファイルの一覧の表示
「出力」:コンピュータが処理した結果
2
キーボード
デジカメ/Webカメラ
Prog-0 2015 Lec01-11
ディスプレイ
プリンタ
プロジェクター
出力のためのハードウェアの例
マウス
入力のためのハードウェアの例
ハードウェア
Prog-0 2015 Lec01-9
ハードディスク
SSD
ネットワークカード
Bluetooth機器
Copyright (C) 1999 - 2015 by Programming-0 Group
無線LAN
通信のためのハードウェアの例
メモリ
記憶のためのハードウェアの例
Copyright (C) 1999 - 2015 by Programming-0 Group
「入力」に応じて違う処理をするために 「プログラム」 が用いられる。
dateコマンド
lsコマンド
「入力」:コンピュータへ与える情報
入力に応じて出力が変わる。
コンピュータとは「入力」と「出力」がある ブラックボックス
だと考えると分かりやすい。
コンピュータとは?
ソフトウェア
dateコマンドなど
装置
(ハードウェア)
プログラム
(ソフトウェア)
6
Prog-0 2015 Lec01-12
ARMなどの組み込み用プロセッサ
SH(セガのゲーム機)やMIPS(Nintendo64,
PlayStation2など)
Intel x86系[Intel Core i7や、AMD Phenom II等の
x86互換チップ](WindowsPC, WS, Macなど)
PowerPC系(旧Macintosh,ゲームキューブ,
Xbox360, PlayStation3など)
Sparc(Sun Sparc Workstation)
現在では以下のようなCPUが使用されている
どんどん高速化し、現在では3GHzを超える
ものもある(1クロックの時間0.33ナノ秒で光
は10cmしか進まない)。
ソフトウェアからの指令を解読して、
計算を実行する。
中央処理(演算)装置
CPU (Central Processing Unit)
コンピュータの考える頭脳
Prog-0 2015 Lec01-10
(人間からの指示)
lsコマンド
lsコマンド
コンピュータ
5
ファイルの一覧の表示
ハードウェア
Core 2
Copyright (C) 1999 - 2015 by Programming-0 Group
Core i7 die photo
Core i7
Copyright (C) 1999 - 2015 by Programming-0 Group
4
以下の2つの構成要素からなる
実際にプログラムからの指示を実行する装置
たくさんの「プログラム」
コンピュータの構成
10
Prog-0 2015 Lec01-15
言葉なら
ジェスチャー
定規を取って
ください
正確に指示を伝えることが出来る。
了解、了解!
何を伝えたいの?
良く分からない!
あるきまり( 文法 と呼ぶ)によって記述される。
言語とは
Prog-0 2015 Lec01-13
7
CPU に比べてスピードが遅い。
電源が切れると情報は消えて
しまう(携帯電話やデジカメで
使用されているフラッシュメモリ
は消えない)。
大容量(1GBは当たり前)
DRAMの特徴
ソフトウェア(の指令)や必要な
データを保管する。
DRAM(Dynamic RAM)という
記憶素子を使用する。
主記憶装置
メモリ
コンピュータの記憶する頭脳
Copyright (C) 1999 - 2015 by Programming-0 Group
Copyright (C) 1999 - 2015 by Programming-0 Group
Copyright (C) 1999 - 2015 by Programming-0 Group
Prog-0 2015 Lec01-16
int i;
for(i=0;….
main(){
でもコンピュータは直
接理解出来ない
でも人間は理解する
のが非常に困難
0111 0010
1010 1110
0001 1100
人間が理解しやすい
言葉
高級言語
コンピュータが直接理
解出来る言葉
機械語
Copyright (C) 1999 - 2015 by Programming-0 Group
その他にもこの丁度中間に位置
する「アセンブリ言語」というもの
もある。(1年後期システム概論
で習う)
人間にもいろいろな言語があるように、コンピュータにもいろ
いろな言語がある
コンピュータの言語
(コンピュータに対する指令)
Prog-0 2015 Lec01-14
皆さんの作るプログラムもここに入る
必要に応じて使用するソフトウェア
9
アプリケーションソフトウェア:
MS-DOS/Windows
MacOS
などなど、コンピュータの資源や働きなどを
配分、協調、管理するのに必要不可欠な
ソフトウェア
Unix(Linux,BSD,Solaris,Irix,AIX...)
8
基本ソフトウェア (オペレーティングシステム、OS) :
ソフトウェアの種類
Prog-0 2015 Lec01-19
gcc xx.c
コンパイル
a.out
./a.out
実行
12
更に「 ./a.out 」 と入力することで、
このa.outファイルを実行する。
Copyright (C) 1999 - 2015 by Programming-0 Group
「gcc xx.c」(xx.cは作成したcファイルの名前)と入力することで、
このプログラムをコンパイルし、実行ファイルa.outを作成する。
コンピュータ
が実行
Copyright (C) 1999 - 2015 by Programming-0 Group
演習ではコンパイラとして「gcc」を使用する。
xx.c
(Cプログラムのファイル)
皆さんの演習の場合
Prog-0 2015 Lec01-17
COBOL:
現在でも主に銀行系などのオンラインなどに多く使われている。
LISP:
人工知能などに良く用いられる。
BASIC:
パソコンの世界では古くから使われてきた。「Visual Basic」として現在も
Windowsでは割と良く使われる。
FORTRAN:
科学計算に良く用いられる。
PL/I:
汎用計算機でのプログラミング言語として一時良く用いられた。
C:
現在最も ポピュラー 11 なプログラミング言語である。
C++:
Cにオブジェクト指向の考えを取り入れたもの。「VisualC++」はWindowsの
開発環境として有名。
Java:
インターネットへの親和性が高く、機種に依存せずプログラムが作成でき
る。携帯電話にも使用されている。
高級言語にはいろいろな種類がある
高級言語
機械語
実行
コンピュータ
コンピュータ
13
の普及につれて(それ以上に)C言語は普及した。
Prog-0 2015 Lec01-20
Copyright (C) 1999 - 2015 by Programming-0 Group
C++、JavaなどはCの拡張で、基本的な文法はほぼ同じである。
現在では C言語に関するANSI(アメリカ)/ISO(世界)/JIS(日本)の各標
準規格が制定されている(どれも内容は同じ。ANSIが有名)。
つまり現在C言語は世界で一番普及しているコンピュータ言語である。
(人間の言葉で言えば英語みたいなものと言えば分かりやすい)
また、ほとんどのコンピュータにC言語のコンパイラが存在する。
現在存在するコンピュータ(パソコンからスーパーコンピュータまで)で稼
働しているソフトウェアのかなりの部分がC言語で作成されている。
やがて Unix
Ritchie はC言語でミニコンピュータのオペレーティングシステムである
Unixを開発(作成)した。
Copyright (C) 1999 - 2015 by Programming-0 Group
インタプリタは高級言語を逐次翻訳して直接実行する。
ただし、実行スピードは遅い。
逐次翻訳・実行
B言語の後継として登場(Dennis Ritchie, 1972 Bell Labs.)
C言語
Prog-0 2015 Lec01-18
インタプリタ言語
(Java/BASICなど)
その2
コンパイル
コンパイラは高級言語を機械語に翻訳する。この機械語プログラムを実行する。
2ステップに分かれていて面倒だが、実行スピードは速い。
コンパイラ言語
(C/FORTRANなど)
その1
高級言語をコンピュータに理解させる方法
メッセージは ” で囲む
printf("Hello\nWorld");
printfを分けても
改行はされない
Prog-0 2015 Lec01-23
Copyright (C) 1999 - 2015 by Programming-0 Group
/home/course/prog0/public_html/2015/lec/source/lec01-2.c
このハンドアウトでは分りやすくするために全角の「\」を使用している。実際にプログラムを作成する時には半角の
逆スラッシュを使用すること。
注:「\」(逆(バック)スラッシュ)記号は日本語環境では「¥」記号となるので、
本によっては改行を「¥n」と表示しているものもある。
printf("Hello");
printf("World");
HelloWorld
Hello
World
printf("HelloWorld");
出力
改行文字(p.34)と出力の仕方の違い
Copyright (C) 1999 - 2015 by Programming-0 Group
\n は表示を改行させる「改行文字」
Prog-0 2015 Lec01-21
上の文の意味:メッセージ(Hello)と改行(\n)をディスプレイに表示する
printf("Hello\n");
14
{ から } の中にプログラムを記述する。
3行目以降がプログラム本体。原則として上から
下へ順番に実行。文末にはセミコロン ; が必要。
2行目は、プログラムの最初であることを示す。
(正確には関数mainの始まり)
main の前にint、後ろに()を忘れずに。
1行目の#includeと、}前のreturn 0は、後
で勉強する。(今はおまじない)
標準出力(ディスプレイ)にメッセージを出力する
はじめての命令文 「printf」
}
return 0;
文n;
~
文2;
文1;
int main(){
#include <stdio.h>
Cプログラムの基本構造
Prog-0 2015 Lec01-24
Copyright (C) 1999 - 2015 by Programming-0 Group
/home/course/prog0/public_html/2015/lec/source/lec01-3.c
#include <stdio.h>
int main( ){
printf("1+2=%d\n",1+2);
return 0;
}
std1dc1{s1000000}1: gcc lec01-3.c
実行結果
std1dc1{s1000000}2: ./a.out
1+2=3
実行
std1dc1{s1000000}3:
(emacsで作成し、ファイル lec01-3.c に保存したとする)
1+2と言う式の値(つ
まり3)が計算され、%d
の部分に表示される
その他の部分はそのま
ま表示される。
/home/course/prog0/public_html/2015/lec/source/lec01-1.c
Copyright (C) 1999 - 2015 by Programming-0 Group
std1dc1{s1000000}1: gcc lec01-1.c
std1dc1{s1000000}2: ./a.out
Hello
実行
std1dc1{s1000000}3:
lec01-1.cをコンパイルする
1+2を計算するプログラム
Prog-0 2015 Lec01-22
実行結果
見易さのために、キー入力を青で、
プログラム出力を赤で表示
#include <stdio.h>
int main( ){
printf("Hello\n");
return 0;
}
terminal の画面上に Hello と表示させるプログラム(emacsで作成し、
ファイル lec01-1.c に保存したとする)
Helloと表示するプログラム(p.26)
Fly UP