プログラミング実習(C言語) ハードウェアとソフトウェアとの関係の理解のためのプログラミング体験 2008.08.07~08 プログラミング実習(C言語) ハードウェアとソフトウェアとの関係の理解のためのプログラミング体験 坂口 利裕
第2日の目標 第1日の復習 反復処理と配列表現 アルゴリズムによる表現 実用プログラム作りへのステップ プログラミング作業全体の流れの確認 練習 sample3.c の拡張問題の解答例 条件判断の使い方 計算問題の作成 反復処理と配列表現 繰り返しの表現 アルゴリズムによる表現 アルゴリズム表現の重要性の認識 既存アルゴリズムによる例題 実用プログラム作りへのステップ データファイルの扱い方 (おおむねp.59まで-最低目標) 文字列データの扱い方 プログラムの分業化 2008.08.07~08 プログラミング実習(C言語)
プログラムの設計から実行までの流れ (設計段階) テキストp.39 コーディング 設計書 ・計算の手順 ・必要な答と必要なデータ プログラミング言語による表現 (ソースプログラム) 2008.08.07~08 プログラミング実習(C言語)
プログラムの設計から実行までの流れ (ソース・プログラムの作成) テキストp.39 プログラム入力・編集 データ・ファイルとして保管 編集用ソフトウェア (エディタ) プログラミング言語による表現 (ソースプログラム) (電子化された) ソースプログラム 2008.08.07~08 プログラミング実習(C言語)
プログラムの設計から実行までの流れ (ソース・プログラムの翻訳) テキストp.39 コンパイルとリンク データ・ファイルとして保管 翻訳用ソフトウェア (コンパイラ) (電子化された) ソースプログラム 実行可能 プログラム 2008.08.07~08 プログラミング実習(C言語)
プログラムの設計から実行までの流れ (実行可能プログラムの実行) テキストp.39 プログラムの実行 オペレーティング システム 実行可能 プログラム CPU (マイクロプロセッサ) 周辺装置 メインメモリ 2008.08.07~08 プログラミング実習(C言語)
実習(2)-その4 (再掲) プログラム sample3.c の実行と内容の観察 改変 テキストp.35~37 実習(2)-その4 (再掲) テキストp.35~37 プログラム sample3.c の実行と内容の観察 条件式の使い方・組合わせ方の確認 フローチャートの見方 改変 角度も考慮した種別判定へ 表4.1(p.36)をうまく埋める フローチャートを考えましょう 1度の判断で2つに区分できるのだから,7種の判定を行うにはいくつの判断(if構文)が必要か? 2008.08.07~08 プログラミング実習(C言語)
実習(3) 補足資料p.11,14~15 既存プロジェクトの呼出し手順 コマンドラインによるプログラミング手順 プログラミング実習(C言語) 2008.08.07~08 実習(3) 補足資料p.11,14~15 既存プロジェクトの呼出し手順 一度作成したプロジェクトを「開く」 プロジェクトに関連付けられたファイルはそのまま呼び出される コマンドラインによるプログラミング手順 コマンド(文字列入力による操作指示)によるプログラミング 古典的な(GUIのない時代の)環境 単独ファイルで完結している小規模プログラムの開発には十分 いずれかの手順にてsample3.cを完成 フローチャートの解答を確認 プログラムの文として表現 出来上がった人から一休み 2008.08.07~08 プログラミング実習(C言語) 坂口 利裕
(休憩) 休憩後に午前分の出欠をとります 2008.08.07~08 プログラミング実習(C言語)
実習(4)-その1 練習 sample4.c 判断処理を利用したゲーム 実行した後,ifの使い方を確認 テキストp.40 2008.08.07~08 プログラミング実習(C言語)
実習(4)-その2 1日目の総復習 練習 sample5.c の完成 余力のある方は,改変問題にチャレンジ テキストp.40~41 結果の判定を追加 BMI指数も追加 標準体重の計算 2008.08.07~08 プログラミング実習(C言語)
反復処理の表現(for構文) 構文の形式 通常は,特定の変数を用いて,反復回数を表現する テキストp.43~45,101~104 for( n=1 ; n<=10 ; n=n+1 ) printf(“n=%d\n”, n) ; 変数nを,1から始めて1ずつ増加させながら10以下の間(10を超えるまで) printf文を反復 2008.08.07~08 プログラミング実習(C言語)
実習(5)-その1 ソースプログラムの新規作成手順 テキストp.43~47 補足資料p.12~13 既存プログラムは[ソリューションを閉じる]で終了 [ファイル]メニューから[新規作成]でプロジェクトを作成 [既存項目の追加]の代わりに[新規項目の追加]を選択 ファイルの種類を[C++ソースファイル]に 保存場所([位置])を確認し,必要に応じて変更 [ファイル名]の指定にも注意(.cは省く) 2008.08.07~08 プログラミング実習(C言語)
実習(5)-その2 C言語プログラム全体の構成の確認 単純な反復処理の確認 テキストp.43~47 補足資料p.12~13 プログラム全体の新規作成の体験 単純な反復処理の確認 構文 for() の基本形の理解と確認 改変問題を行うことで理解を深める 2008.08.07~08 プログラミング実習(C言語)
(休憩・昼食) ここまでくれば占めたモノ! 栄養を十分補給して午後に備えましょう 2008.08.07~08 プログラミング実習(C言語)
データの構造化-配列型 数列,ベクトル,行列を扱うためのデータ表現 テキストp.49~50,105 これまでの変数→単純変数と区別 4.5 3.1 変数x 4.5 3.1 3.1 単純変数の場合には,同じ変数には,同時に二つ以上のデータを記憶できない! 2008.08.07~08 プログラミング実習(C言語)
配列変数の構造 同じ名前の変数を区分け →それぞれに別のデータを記憶 テキストp.49~50,105 float x[5] ; x という名前の5つに区分けされた変数 2.5 x[0] 4.2 x[1] 3.5 x[2] 6.9 x[3] 2.5 x[4] それぞれの区画は単純変数と同じ 配列変数x (全体で) 2008.08.07~08 プログラミング実習(C言語)
配列変数の表記 定義 データの記憶・参照-区画ごとに行なう テキストp.49~50,105 型名(それぞれの区画の型) 名前[全体の区画数] ; 例) float x[5] ; データの記憶・参照-区画ごとに行なう 名前[区画の番号(添え字:subscript)] 添え字は0からの順序番号 添え字として,式を用いることが可能 例) x[0] = 3.2 ; x[1] = x[0]+3 ; x[n] = x[n-1]+x[n-2] ; 2008.08.07~08 プログラミング実習(C言語)
反復処理における配列の利用 5つのデータを(それぞれ)読み取って記憶する テキストp.50,75~76 複数の単純変数を用いる場合 float a,b,c,d,e ; scanf(“%g”,&a) ; scanf(“%g”,&b) ; scanf(“%g”,&c) ; scanf(“%g”,&d) ; scanf(“%g”,&e) ; 配列変数を用いる場合 float x[5] ; int m ; for( m=0 ; m<5 ; m=m+1 ) scanf(“%g”,&x[m]) ; mが変化することを利用 2008.08.07~08 プログラミング実習(C言語)
実習(6)-その1 配列表現の確認 練習 sample6.c と sample7.c の比較 それぞれ実行してみて,「結果は同じ」ことを確認 2008.08.07~08 プログラミング実習(C言語)
実習(6)-その2 練習 sample7.c を改良し,配列の特徴を生かす 規則性をうまくとらえる(取り出す)ことがポイント データ数を増やすには? 2008.08.07~08 プログラミング実習(C言語)
実習(6)-その3 最低限 sample7 の改良を終えたら休憩 練習 sample8 を実行 (余裕のある方) 「表引き」処理への配列表現の応用 限定された範囲の検索処理の基本 2008.08.07~08 プログラミング実習(C言語)
複雑な問題の考え方 (人間にとっては簡単でも)コンピュータにとっては,理解できる言葉(プログラミング言語)でないと伝わらない テキストp.51~56 (人間にとっては簡単でも)コンピュータにとっては,理解できる言葉(プログラミング言語)でないと伝わらない 条件判断 if 反復処理 for (やwhile) 計算処理 変数 = 式(代入) データの入力 scanf メッセージやデータの表示 printf の組み合わせで表現し直すのが非常にやっかい 2008.08.07~08 プログラミング実習(C言語)
アルゴリズム テキストp.51~56 計算手順(算法) 図式による表現 代表的なアルゴリズムとそのプログラム表現を学習 特定のプログラミング言語に依らない 判断基準や処理内容が明確である (答えがない時も含めて)必ず答を導ける 自然言語や数式による記述が中心 図式による表現 フローチャート 代表的なアルゴリズムとそのプログラム表現を学習 ユークリッドの互除法-最大公約数を求める 単純選択法-データを順序に応じて並べかえる 2008.08.07~08 プログラミング実習(C言語)
実習(7)-その1 アルゴリズムを考える実習 ユークリッドの互除法 アルゴリズム表現とフローチャートの比較 プログラム例の入力と実行 テキストp.51~56 アルゴリズムを考える実習 ユークリッドの互除法 アルゴリズム表現とフローチャートの比較 プログラム例の入力と実行 2008.08.07~08 プログラミング実習(C言語)
実習(7)-その2 アルゴリズムを考える実習 単純選択法 余力のある方は, 演習問題-金種計算に挑戦! 練習 sample9.c の実行 並べ替え機能を追加 フローチャートからプログラムへの読み替え 余力のある方は, 演習問題-金種計算に挑戦! 2008.08.07~08 プログラミング実習(C言語)
単純選択法の動き テキストp.53~56 3 x[0] 2 x[1] 5 x[2] 6 x[3] 8 x[4] i j imin アルゴリズムAによる探索範囲(i=1~n) アルゴリズムBによる探索範囲(j=i+1~n) j imin より小さい値の場所に更新 本来の最小値の場所iと,実際の最小値の場所iminとが異なった場合はデータを入れ替え 2008.08.07~08 プログラミング実習(C言語)
実用プログラムの作成に向けて ファイル入出力 文字情報の扱い 大規模なプログラム→部品化(分業化)→独立した関数に分解して開発 テキストp.57~62,109~111 ファイル入出力 文字情報の扱い 大規模なプログラム→部品化(分業化)→独立した関数に分解して開発 2008.08.07~08 プログラミング実習(C言語)
ファイル入出力 キーボードからのデータ入力 計算結果の画面表示 ファイルを直接利用する手段 手軽にできる(特に大げさな準備は不要) テキストp.57~59,109~110 キーボードからのデータ入力 手軽にできる(特に大げさな準備は不要) 大量データに対する処理・同一データに対して別のプログラムで処理→入力ミスの恐れ 計算結果の画面表示 情報量が少ない時は手軽に利用できる 直接ワープロなどに利用できない ファイルを直接利用する手段 2008.08.07~08 プログラミング実習(C言語)
C言語におけるファイルの扱い方 “ファイル”を表す特別な型の変数:FILE型 FILE *f ; テキストp.57~59,109~110 “ファイル”を表す特別な型の変数:FILE型 FILE *f ; 実際のファイルを指定して“開く” f = fopen(ファイル名,ファイルモード) ; f = fopen(“ex13.txt”, “r”) ; ファイル入出力関数 fscanf, fprintfを使う fscanf(f, …) ; fprintf(f, …) ; “閉じる” fclose(f) ; 2008.08.07~08 プログラミング実習(C言語)
文字情報の扱い C言語における文字型 使い方 テキストp.106~107 char (<character)の配列 ただし,実際には余分に1文字分必要。 使い方 読み取り:scanf(“%s”,name); /*配列名のみ*/ 表示:printf(“%s”,name) ; 四則演算:不可能 許される演算:比較・複写(代入)・連結→標準ライブラリ関数使用 2008.08.07~08 プログラミング実習(C言語)
分業化のための表現 関数を自前で定義 一般的書き方 テキストp.61,82~83 関数の型 関数名 (【引数の型 引数の名前【,…】 】 ) { 関数の処理 return 関数の処理結果 ; } 定義側 float sum( int n, float x[ ] ) { int k ; float s ; s=0 ; for( k=0 ; k<n ; k+=1 ) s += x[k] ; return s ; } 参照側 xmean = sum(n,x)/n ; 2008.08.07~08 プログラミング実習(C言語)
(総合実習) 消化不良の例題 余力のある方 自発的に復習してみましょう 質問ももちろんOK 演習問題(p.87~88)にも挑戦 プログラミング実習(C言語) 2008.08.07~08 (総合実習) 消化不良の例題 自発的に復習してみましょう 質問ももちろんOK 余力のある方 演習問題(p.87~88)にも挑戦 2008.08.07~08 プログラミング実習(C言語) 坂口 利裕