情報とコンピュータ 静岡大学工学部 安藤和敏 2005.11.07.

Slides:



Advertisements
Similar presentations
山元進.  for 文  while 文  do ~ while 文  文のネスト  break 文  continue 文.
Advertisements

プログラミング Ⅱ 第2回 第1回(プログラミングⅠの復 習) の解説. プログラムの作り方 いきなり完全版を作るのではなく,だんだ んふくらませていきます. TicTa cToe1.
初年次セミナー 第8回 データの入力.
プログラムのパタン演習 解説.
情報とコンピュータ 静岡大学工学部 安藤和敏
Fortran と有限差分法の 入門の入門の…
ヒープソートの演習 第13回.
近似アルゴリズム 第10章 終了時刻最小化スケジューリング
第11回 整列 ~ シェルソート,クイックソート ~
データ構造とアルゴリズム論 第6章 探索のアルゴリズム
ファーストイヤー・セミナーⅡ 第8回 データの入力.
配列(2) 第10回[平成15年6月26日(木)]:PN03-10.ppt 今日の内容 1 素数を求める(教科書の例):復習
データ構造とアルゴリズム 第10回 mallocとfree
数値計算及び実習 第3回 プログラミングの基礎(1).
基礎プログラミングおよび演習 第9回
プログラミング基礎I(再) 山元進.
多重ループ 繰り返し構造:補足事項 第8回目 [6月12日、H.15(‘03)] 本日のメニュー 1)前回の課題について
第2回ネットワークプログラミング 中村 修.
情報基礎実習I (第5回) 木曜4・5限 担当:北川 晃.
プログラミング演習(2組) 第12回
C言語 配列 2016年 吉田研究室.
数値計算及び実習 第7回 プログラミングの基礎(5).
第8回 プログラミングⅡ 第8回
情報科学1(G1) 2016年度.
プログラミング言語論 第4回 手続きの引数機構 変数の有効範囲
情報基礎A 第14週プログラミング 実際のデータ処理での応用(2)
情報理論2 第6回 小林 学 湘南工科大学 2011年11月15日 〒 神奈川県藤沢市辻堂西海岸1-1-25
情報基礎A 第11週 プログラミング入門 VBAの基本文法3 配列・For~Next
湘南工科大学 2013年12月10日 プログラミング基礎1 湘南工科大学情報工学科 准教授 小林 学.
ベイジアンネットワーク概説 3.6 構造の探索アルゴリズム
データ構造とアルゴリズム論 第2章 配列(構造)を使った処理
基礎プログラミング演習 第7回 繰り返し.
プログラミング基礎a 第8回 プログラムの設計 アルゴリズムとデータ構造
第7回 条件による繰り返し.
整数データと浮動小数データ 整数データと浮動小数データの違い.
繰り返し計算 while文, for文.
プログラミング言語論 第9回 Hoare論理の練習問題 手続きの引数機構 変数の有効範囲
高度プログラミング演習 (03).
情報とコンピュータ 静岡大学工学部 安藤和敏
前回の練習問題.
情報とコンピュータ 静岡大学工学部 安藤和敏
講義では、Cプログラミングの基本を学び 演習では、やや実践的なプログラミングを通して学ぶ
第7回 条件による繰り返し.
情報とコンピュータ 静岡大学工学部 安藤和敏
プログラミング基礎a 第7回 C言語によるプログラミング入門 ファイル入出力
プログラミング基礎a 第8回 プログラムの設計 アルゴリズムとデータ構造
プログラミング言語論 第5回 手続きの引数機構 変数の有効範囲
オブジェクト指向プログラミングと開発環境
プログラムの基本構造と 構造化チャート(PAD)
アルゴリズムとデータ構造 2011年7月8日課題の復習
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
情報とコンピュータ 静岡大学工学部 安藤和敏
データ構造とアルゴリズム 第11回 リスト構造(1)
データ構造とアルゴリズム (第5回) 静岡大学工学部 安藤和敏
データ構造とアルゴリズム (第3回) 静岡大学工学部 安藤和敏
プログラミングⅡ 第2回.
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
復習 Cにおけるループからの脱出と制御 break ループを強制終了する.if文と組み合わせて利用するのが一般的. continue
アルゴリズムとプログラミング (Algorithms and Programming)
情報とコンピュータ 静岡大学工学部 安藤和敏
アルゴリズムとデータ構造 --- 理論編 --- 山本 真基
第5回 プログラミングⅡ 第5回
精密工学科プログラミング基礎 第7回資料 (11/27実施)
アルゴリズム入門 (Ver /10/07) ・フローチャートとプログラムの基本構造 ・リスト ・合計の計算
プログラミング基礎a 第7回 C言語によるプログラミング入門 ファイル入出力
精密工学科プログラミング基礎Ⅱ 第2回資料 今回の授業で習得してほしいこと: 配列の使い方 (今回は1次元,次回は2次元をやります.)
プログラミング入門2 第5回 配列 変数宣言、初期化について
情報基礎A 第14週プログラミング 実際のデータ処理での応用(2)
プログラミング論 バイナリーサーチ 1.
情報とコンピュータ 静岡大学工学部 安藤和敏
Presentation transcript:

情報とコンピュータ 静岡大学工学部 安藤和敏 2005.11.07

3章 数値計算と関数の学習 数値計算をしてみよう 単純な計算 関数 ループの作成と関数の学習 最適値の探索 情報を配列に格納する 3章 数値計算と関数の学習 数値計算をしてみよう 単純な計算 関数 ループの作成と関数の学習 最適値の探索 情報を配列に格納する 総和,極小,極大を求める プログラミングのパターン

前回に考えた問題 20歳の青年が60歳までに1億円貯めるには,毎月いくら貯金しなければならないか?

預金残高計算のアルゴリズム 指定された毎月の積立額(payment)を読み込む. savings = 0,monthint = 0.01 (年率12%)と設定する.. 480ヶ月の各月の残高を savings := savings + (savings*monthint) + payment; で計算する. 4.40年後の残高を出力する.

40年後の預金計算のプログラム program Savings40Years(input, output); var payment, savings, monthint, month: real; begin writeLn('毎月いくらずつ積み立てますか?(単位:万円)'); readLn(payment); savings := 0; monthint := 0.01; month :=1; while month <= 480 do savings := savings + (savings*monthint) + payment; month := month +1; end; writeLn('40年後の預金残高は,',savings:10:2,'万円です.'); end.

配列 月(1~480)を指定したときに,その月末の預金残高が分かるようなプログラムを作りたい. 480ヶ月の全ての預金残高をコンピュータのメモリに記憶できればよい. 480個の変数を用意する便利な方法がある.

配列の宣言 ・・・ 例: type realarray480 = array[1..480] of real; var table: realarray480; table[1] table[2] table[3] table[480] ・・・ メモリ上に,table[1], table[2], …, table[480] という名前の付いた記憶場所が確保される.この記憶場所には,実数型のデータが記憶される.

プログラム FirstArray program FirstArray(input, output); type realarray4 = array[1..4] of real; var A: realarray4; begin A[1] := 10; A[2] := 10; A[3] := 10; A[4] := 10; end. A[1] 10.0 A[2] 10.0 A[3] 10.0 A[4] 10.0

プログラム FirstArray’ program FirstArray(input, output); type realarray4 = array[1..4] of real; var A: realarray4; i : integer; begin i := 1; while i <= 4 do A[i] := 10; i := i + 1; end; end. i 4 1 3 5 2 A[1] 10.0 A[2] 10.0 A[3] 10.0 A[4] 10.0

配列要素の画面出力 i := 1; while i <= 4 do begin writeLn(A[i]); i := i + 1; 2 3 1 5 4 5 i := 1; while i <= 4 do begin writeLn(A[i]); i := i + 1; end; end. A[1] 10 A[2] 10 A[3] 10 A[4] 10 10.0 10.0 10.0 10.0

プログラム SecondArray program SecondArray(input, output); type realarray4 = array[1..4] of real; var A: realarray4; i : integer; begin i := 1; while i <= 4 do A[i] := i + 10; i := i + 1; end; 以下省略 i 4 1 3 5 2 A[1] 11.0 A[2] 12.0 A[3] 13.0 A[4] 14.0

プログラム FillSavingTable program FillSavingsTable(input, output); type realarray480: array[1..480] of real; var table: realarray480; payment, savings, monthint: real; month: integer; (次のページへ続く)

プログラム FillSavingTable (続き) (前ページからの続き) begin writeLn('毎月いくらずつ積み立てますか?(単位:万円)'); readLn(payment); savings := 0; monthint := 0.01; month :=1; while month <= 480 do savings := savings + (savings*monthint) + payment; table[month] := savings; month := month +1; end; end.

次のような動作をするプログラムを作りたい コンピュータ 毎月いくらずつ積み立てますか?(単位:万円) ユーザ 0.5 コンピュータ 40年分の貯金計画が準備できました. コンピュータ 何ヶ月目の積立額を知りたいですか? ユーザ 60 コンピュータ 40.83 コンピュータ 何ヶ月目の積立額を知りたいですか? ユーザ 100 コンピュータ 40.83 コンピュータ 何ヶ月目の積立額を知りたいですか? ユーザ コンピュータ これでプログラムは終了です.

質問ルーチンのアルゴリズム 「何ヶ月目の積立額を知りたいですか?」 と質問する. 知りたい月(month)を受け取る. その月が0より大きい限りは次の動作を繰り返す. その月の預金残高を出力する.

プログラム SavingsTable (1) program SavingsTable(input, output); type realarray480 = array[1..480] of real; var table: realarray480; payment, savings, monthint: real; month: integer;

プログラム SavingsTable (2) begin writeLn('毎月いくらずつ積み立てますか?(単位:万円)'); readLn(payment); savings := 0; monthint := 0.01; month :=1; while month <= 480 do savings := savings + (savings*monthint) + payment; table[month] := savings; month := month +1; end; writeLn('40年分の貯金計画が準備できました.');

プログラム SavingsTable (3) writeLn('何ヶ月目の積立額を知りたいですか?'); readLn(month); while month > 0 do begin writeLn(table[month]:10:2); end; writeLn('これでプログラムは終了です.'); end.

総和,極小,極大を求める ある人が毎週1回ずつ,1ヶ月に4回預金するとして,利息分を無視する場合,総預金残高はいくらになるか?また,預金時の最小金額と最大金額はいくらか? この質問に答えるために,一般的な累算方法(この場合は総和)と極値的要素(最大値と最小値)を求める方法を調べる.

プログラム Deposit program Deposit(input, output); type realarray4 = array[1..4] of real; var deposit: realarray4; i : integer; begin i := 1; while i <= 4 do writeLn('預金額はいくらですか?'); readLn(deposit[i]); i := i + 1; end; end. i 4 1 3 5 2 deposit[1] 10.0 deposit[2] 5.0 deposit[3] 7.0 deposit[4] 12.0

deposit[1]~deposit[4]の総和を求める方法 sum := 0; deposit[1] を sum に加える. deposit[2] を sum に加える. deposit[3] を sum に加える. deposit[4] を sum に加える. deposit[1] 10.0 deposit[2] 5.0 deposit[3] 7.0 deposit[4] 12.0 deposit[1]を sum に加えるには, とする. sum := sum + deposit[1];

deposit[1]~deposit[4]の総和を求める方法 sum := 0; sum := sum + deposit[1]; sum := sum + deposit[2]; sum := sum + deposit[3]; sum := sum + deposit[4]; deposit[1] 10.0 deposit[2] 5.0 deposit[3] 7.0 deposit[4] 12.0 sum 34.0 22.0 10.0 15.0

deposit[1]~deposit[4]の総和を求める方法 sum := 0; i := 1; while i <= 4 do begin sum := sum + deposit[i]; i := i + 1; end; deposit[1] 10.0 deposit[2] 5.0 deposit[3] 7.0 deposit[4] 12.0 sum 15.0 10 22.0 34.0 i 5 3 1 2 4

累算の一般的なアルゴリズム アキュムレータに初期値を入れる. インデックスに初期値を与える. 操作対象が他にもある場合は以下を繰り返す. アキュムレータ := アキュムレータ 操作 操作対象 インデックスの値を増やす.

プログラム SumN program SumN(input, output); var i, n, sum: real; begin readln(n); sum := 0; i :=1; while i <= n do sum := sum + i; i := i + 1; end; writeLn('合計は,',sum:8:2,'です.'); end.

プログラム Factorial program Factorial(input, output); var i, n, product: real; begin readln(n); product := 1; i :=1; while i <= n do product := product * i; i := i + 1; end; writeLn(n:8:2,'の階乗は,',product:8:2,'です.'); end.

プログラム Asequence program Asequence(input, output); var i, n: integer; Asequence: string; begin readln(n); Asequence := ''; i := 1; while i <= n do Asequence := Asequence & 'A'; i := i + 1; end; writeLn('Aの列は,',Asequence,'です.'); end.

deposit[1]~deposit[4]の最大値を求めるアルゴリズム 現在までの最大値 := 最初の要素の値. i := 2;. i <= 4 である限り以下を繰り返す. もしdeposit[i] > 現在までの最大値ならば,     現在までの最大値 := deposit[i] とする. i := i + 1.

deposit[1]~deposit[4]の最大値を求める方法 largestsofar := deposit[1]; i := 2; while i <= 4 do begin if deposit[i] > largestsofar do largestsofar := deposit[i]; end; i := i + 1; deposit[1] 10.0 deposit[2] 5.0 deposit[3] 7.0 deposit[4] 12.0 largestsofar 10 12.0 i 5 3 2 4

極値を求める一般的なアルゴリズム 現在までの極値 := 最初の要素の値. インデックスに初期値を与える. 他にも調べる要素がある場合は以下を繰り返す. その要素の値が,現在までの極値を越えていたら,     現在までの極値 := その要素の値 とする. インデックスの値を増やす.

宿題 p. 121の練習問題 1. p. 126の練習問題 2, 3, 4. 提出しなくても良い.