PowerPoint プレゼンテーション
|
|
|
- のぶあき ままだ
- 7 years ago
- Views:
Transcription
1 プログラミング応用演習 第 2 回文字列とポインタ
2 先週のパズルの解説 答え : 全部 p a 1 図の書き方 : p+1 は式であって その値を格納する記憶場所を考えないので 四角で囲まない 2 p+1 同じものを表すいろいろな書き方をしてみましたが パズル以上の意味はありません プログラム中に書くときは p+1 が短くていいんじゃないかな p+1 は 2 の記憶場所 p[1] は 2 に格納されている値 したがって &p[1] は 2 の記憶場所 すなわち p+1 に同じ *p は 1 に格納されている値 &*p は 1 の記憶場所 すなわち p に同じ したがって (&*p)+1 は p+1 に同じ *(p+1) は 2 に格納されている値 したがって &*(p+1) は 2 の記憶場所 すなわち p+1 に同じ p[0] は 1 に格納されている値 &p[0] は 1 の記憶場所 すなわち p に同じ したがって &p[0]+1 は p+1 に同じ
3 今日のお題 ポインタの利用例 文字列の操作などにポインタを使ってみる 題材として ( 情報セキュリティ学科っぽく ) 暗号化するプログラム 暗号を破るプログラムを考えます
4 復習 : 文字列 C 言語では 文字列は文字の配列 最後に \0( ヌル文字 ) がある 文字を表す型が char なので 文字列は char の配列 文字列定数は "( ダブルクォート ) で括って表す文字 文字コードという整数値に対応している 文字を整数として計算したり比較したりできる 文字コードを計算 比較している 文字定数は '( シングルクォート ) で括って表す アルファベットは文字コード中で並んでいる 例えば 'A'+1 は 'B' に等しい
5 復習 : ポインタと配列 配列の名前は 先頭の要素へのポインタ値を表す 例 ) char s[10]; と宣言したとき s は s[0] の記憶場所を表す 配列の要素はメモリ中で連続している 例 ) char s[10]; と宣言したとき s[0], s[1], s[2]... の記憶場所は連続している ポインタへの整数の加減算は 配列の添字の加減算に対応する 例 )char s[10],*p=s; と宣言 ( と初期代入 ) したとき p+1 は s[1] の記憶場所を p+2 は s[2] の記憶場所をそれぞれ表す
6 文字列の入力 scanf は 入力文字列を空白で区切ってしまう 便利なこともあるが 機能が多過ぎて使い勝手が悪いこともある 入力された空白や改行を そのまま文字列として読み込むには fgets を使う stdio.h で定義される構造体 char* fgets(char *s, int size, FILE *stream); 入力文字列を格納する記憶場所 入力文字列の最大長さ ( 最後のヌル文字を含む ) 入力元のファイル 標準入力の場合 stdin を指定する
7 シーザー暗号 文字列と 0~25 の整数を引数に受取り 文字列中のすべての英字を アルファベット順で与えられた数だけ後ろの英字に置き換えて得られる文字列に変換する関数を考える Z の次は A に循環するものとする 例 ) "Hello World!", 5 "Mjqqt Btwqi!"
8 例 ) 文字列中の英字を k 個ずらす関数 文字の配列を使った場合 配列だが 参照呼出し参照呼出しなので 中 ポインタを使った場合( 関数のみ ) なので 中身を書き換身を書き換えることが #include <stdio.h> えることができるできる #define MAXLEN 100 void caesar(char s[], int k) { int i; for(i=0 ; s[i]!= 0 ; i++) { if (('a'<=s[i])&&(s[i]<='z')) { s[i] = (s[i]-'a'+k)%26+'a'; else if (('A'<=s[i])&&(s[i]<='Z')) { int main() { s[i] = (s[i]-'a'+k)%26+'a'; char s[maxlen]; int k; fgets(s,maxlen,stdin); scanf("%d",&k); caesar(s,k); printf("%s",s); return 0; void caesar(char *s, int k) { char *p; for(p=s ; *p!= 0 ; p++) { if (('a'<= *p)&&(*p <='z')) { s p *p = (*p-'a'+k)%26+'a'; else if (('A'<= *p)&&(*p <='Z')) { *p = (*p-'a'+k)%26+'a';
9 シーザー暗号を破ってみる S vyfo Xkqkckus! この暗号文から鍵なしで平文が分かるか? シーザー暗号の暗号文は 鍵 ( 整数値 ) k に対して 26-k (mod 26) を鍵とする暗号化と同じ操作をすると 復号される 入力文字列に対して 26 通りの復号すべてを出力するプログラムを考えよう
10 文字列のコピーを要する 入力された暗号文を異なる鍵で何度も復号 ( 暗号化と同じ操作 ) するので 暗号文を毎回コピーすることを考える ( この問題の場合はコピーしない方法もありえますが ) 暗号を破るプログラムの全体像 : 文字列 ( 暗号文 ) を入力する 鍵を数え挙げる 鍵の一つを k として 以下を繰り返す : 入力文字列をコピーする コピーした文字列を鍵 k で復号する 得られた文字列を出力する
11 シーザー暗号を破るプログラム #include <stdio.h> #define MAXLEN 100 int main() { int k; char s[maxlen]; fgets(s,maxlen,stdin); for(k=0 ; k<26 ; k++) { char cp[maxlen],*src,*dst; src=s; dst=cp; while(*src!= 0) { 関数 caesar の定義 *dst = *src; dst++; src++; *dst=0; caesar(cp,(26-k)%26); printf("%s",cp); return 0; 鍵の数え挙げ s の内容を cp にコピー 鍵 k での暗号化に対応する復号の鍵 全通り行うので k でもよい おまけのパズル この while 文は C 言語だと while((*dst++=*src++)); と書ける ( セキュアコーディング的観点からはおすすめしない ) なぜ こう書けるか 分かりますか?
12 シーザー暗号の改造 文字列の他に N 個の整数値 k 0,k 1,...,k N-1 を受け取る 文字列の最初の文字 (0 文字目 ) を k 0 で暗号化し 次の文字 (1 文字目 ) を k 1 で暗号化し...N-1 文字目は k N-1 で暗号化する N 文字目以降の暗号化には 再び k 0 から順に使う 例 ) "Never give up!" を長さ 3 の鍵 5,7,3 で暗号化する : Never give up Slyjy lpyj xu. 文字列 ( 平文 ) と鍵の長さN, およびN 個の整数値を受け取ると 上記の暗号化を行って得られる文字列を出力するプログラムを考えよう
13 改造版シーザー暗号 鍵が配列 #include <stdio.h> #define MAXLEN 100 #define MAXKEY 6 void caesar2(char *s, int N, int *key){ int ki=0; char *p; for(p=s ; *p!= 0 ; p++) { int k = key[ki]; if (('a'<= *p)&&(*p <='z')) { *p = (*p-'a'+k)%26+'a'; else if (('A'<= *p)&&(*p <='Z')) { *p = (*p-'a'+k)%26+'a'; ki=(ki+1)%n; 鍵の ki 番目の値を使う int main() { int N,key[MAXKEY]; char s[maxlen]; int i; fgets(s,maxlen,stdin); scanf("%d",&n); if ((N < 1) (MAXKEY < N)) { printf("error\n"); return 1; for(i=0 ; i<n ; i++) { scanf("%d",key+i); caesar2(s,n,key); printf("%s",s); return 0; int の配列の要素へのポインタを渡す
14 改造版シーザー暗号を破ってみる 改造前と同様に全通り出力すればよい (?) N=2 では 26 2 =676 通り N=3 では 26 3 =17,576 通りこれくらいが 人間の目でみてチェックできる限界 平文の長さ 鍵の長さのときは そもそも破れない 暗号文と鍵の長さ (N) が入力されたとき 可能な平文を全通り出力するプログラムを考えよう
15 入力値 N に対して N 重ループが要る? 26 N 通りの鍵がありうる 0~25 の繰り返しを N 重にすれば全通りを数え挙げられる (?) N は入力値なので プログラムを書いている時点では分からない N 重ループのプログラムは書けない 例えば次のようなプログラミング方法がある : 1 0~26 N -1 の繰り返しをする 2 0~25 の繰り返しの中で再帰呼出しをする
16 改造版シーザー暗号を破ろうとするプログラム 1 #include <stdio.h> #define MAXLEN 100 #define MAXKEY 6 int power(int x, int y) { int i,r=1; for(i=0 ; i<y ; i++) { r *= x; return r; 関数 caesar2 の定義 x の y 乗の計算 int main() { char s[maxlen]; int N,key[MAXKEY]; int i,pk; fgets(s,maxlen,stdin); scanf("%d",&n); if ((N < 1) (MAXKEY < N)) { printf("error\n"); return 1; pk = power(26,n); for(i=0 ; i<pk ; i++) { char cp[maxlen]; int j,k=i; s を cp にコピーするコード for(j=0 ; j<n ; j++) { key[j] = k%26; k /= 26; caesar2(cp,n,key); printf("%s",cp); return 0; 鍵の数え挙げ i 番目の鍵を作る
17 改造版シーザー暗号を破ろうとするプログラム 2 #include <stdio.h> #define MAXLEN 100 #define MAXKEY 6 void keygen(int N, int n, int *key, char *s){ int i; if (n == N) { char cp[maxlen]; caesar2(cp,n,key); printf("%s",cp); return; for(i=0 ; i<26 ; i++) { 関数 caesar2 の定義 s を cp にコピーするコード key[n] = i; keygen(n,n+1,key,s); return; 再帰の終端で復号して表示 繰り返しの中で再帰呼出し int main() { char s[maxlen]; int N,key[MAXKEY]; fgets(s,maxlen,stdin); scanf("%d",&n); if ((N<1) (MAXKEY<N)) { printf("error\n"); return 1; keygen(n,0,key,s); return 0;
18 実験の仕方 : リダイレクトとパイプ こんなファイルを作る プログラムに入力する文字列を記述したもの 3 のあとの改行を忘れないように プログラムに入力する値を流し込む ( リダイレクト )./a.out < test Slyjy lpyj xu. 3 ファイルの名前は何でもよいが ここでは test としておく 出力を less コマンドに渡す ( パイプ )./a.out < test less
19 MAXKEY( 鍵の最大長さ ) を 6 にした理由 26 6 =308,915,776 < 2 31 =2,147,483,648 < 26 7 =8,031,810,176 なので 鍵の総数を 32bit の int で表すとすると 鍵の長さは最大 6 改造版シーザー暗号を破ろうとするプログラム 1 は 長さ 7 以上の鍵に対応していない 改造版シーザー暗号を破ろうとするプログラム 2 は 長さ 7 以上の鍵でも動く ただし 何億もの候補を提示されても人間はチェックできないので無意味
20 実行してみよう 以下の暗号を解読してください ただし 改造版シーザー暗号で鍵の長さが 2 と分かっている Ol h nelna wevtyntzle!
21 次回予告 構造体
PowerPoint プレゼンテーション
プログラミング応用演習 第 2 回文字列とポインタ 先週のパズルの解説 答え : 全部 p a 1 図の書き方 : p+1 は式であって その値を格納する記憶場所を考えないので 四角で囲まない 2 p+1 同じものを表すいろいろな書き方をしてみましたが パズル以上の意味はありません プログラム中に書くときは p+1 が短くていいんじゃないかな p+1 は 2 の記憶場所 p[1] は 2 に格納されている値
PowerPoint プレゼンテーション
プログラミング応用演習 第 2 回文字列とポインタ 再掲 プログラミング上達のために 何度か言っていますが 単純な方法があります : 毎日プログラムを書いていれば そのうち慣れます 中身はなんでも構いません 逆にしばらくプログラムを書かずにいると忘れます レポート以降プログラムを書いていないという人は そろそろ忘れている頃かも知れませんね 今後もプログラミングの授業があり 基礎演習の内容が前提となりますので
PowerPoint プレゼンテーション
プログラミング応用演習 第 5 回演習 前回までのお話 ポインタ ポインタを用いた文字列処理 構造体 ファイル 再帰的構造体 リスト構造 動的メモリ管理 今日のお題 ポインタやファイルなど これまでの内容の練習 教材 以前 以下に単語を収録したファイルがあることを紹介した : /usr/share/dict/words この中からランダムに単語を取り出したファイルを用意した http://sun.ac.jp/prof/yamagu/2019app/
PowerPoint プレゼンテーション
プログラミング応用演習 第 3 回構造体, ファイル入出力 先週の出席確認へのコメント 暗号を破りたいが 平文の候補が多すぎる 人間の目で確認する代わりに どんなプログラムがあればよいか? 辞書を挙げた人が多かった 正しい着眼です 何億個もの平文候補が想定されるので 形態素解析や品詞判別を挙げた人もいます 辞書に近い回答で悪くはないのですが 平文候補ごとにあまり高機能なものを呼び出すと時間がかかる
C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ
C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 今回のプログラミングの課題 次のステップによって 徐々に難易度の高いプログラムを作成する ( 参照用の番号は よくわかる C 言語 のページ番号 ) 1. キーボード入力された整数 10 個の中から最大のものを答える 2. 整数を要素とする配列 (p.57-59) に初期値を与えておき
PowerPoint Presentation
工学部 6 7 8 9 10 組 ( 奇数学籍番号 ) 担当 : 長谷川英之 情報処理演習 第 7 回 2010 年 11 月 18 日 1 今回のテーマ 1: ポインタ 変数に値を代入 = 記憶プログラムの記憶領域として使用されるものがメモリ ( パソコンの仕様書における 512 MB RAM などの記述はこのメモリの量 ) RAM は多数のコンデンサの集合体 : 電荷がたまっている (1)/ いない
Microsoft Word - no15.docx
7. ファイルいままでは プログラムを実行したとき その結果を画面で確認していました 簡単なものならそれでもいいのですか 複雑な結果は画面で見るだけでなく ファイルに保存できればよいでしょう ここでは このファイルについて説明します 使う関数のプロトタイプは次のとおりです FILE *fopen(const char *filename, const char *mode); ファイルを読み書きできるようにする
情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤
情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤 2017.12.7 前回の演習問題の解答例 1. 四則演算のできる計算機のプログラム ( 括弧も使える ) 2. 実数の扱える四則演算の計算機のプログラム ( 実数 も というより実数 が が正しかったです ) 3. 変数も扱える四則演算の計算機のプログラム ( 変数と実数が扱える ) 演習問題 1 で行うべきこと
memo
数理情報工学演習第一 C プログラミング演習 ( 第 5 回 ) 2015/05/11 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 今日の内容 : プロトタイプ宣言 ヘッダーファイル, プログラムの分割 課題 : 疎行列 2 プロトタイプ宣言 3 C 言語では, 関数や変数は使用する前 ( ソースの上のほう ) に定義されている必要がある. double sub(int
コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol
コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include 2. #include /*troupper,islower,isupper,tolowerを使うため宣言*/ 3. 4. int get_n(char *); 5. void replace(char
<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>
C 言語講座第 2 回 作成 : ハルト 前回の復習基本的に main () の中カッコの中にプログラムを書く また 変数 ( int, float ) はC 言語では main() の中カッコの先頭で宣言する 1 画面へ出力 printf() 2 キーボードから入力 scanf() printf / scanf で整数を表示 / 入力 %d 小数を表示 / 入力 %f 3 整数を扱う int 型を使う
PowerPoint プレゼンテーション
2018/10/05 竹島研究室創成課題 第 2 回 C 言語演習 変数と演算 東京工科大学 加納徹 前回の復習 Hello, world! と表示するプログラム 1 #include 2 3 int main(void) { 4 printf("hello, world! n"); 5 return 0; 6 } 2 プログラム実行の流れ 1. 作業ディレクトリへの移動 $ cd
PowerPoint プレゼンテーション
プログラミング応用演習 第 4 回再帰的構造体 プログラミングを 余談 : 教えることの難しさ 丁寧に説明しないと分かってもらえない 説明すると 小難しくなる学生が目指すべきところプログラム例を説明されて理解できる違うやり方でも良いので自力で解決できる おっけー 動けば良い という意識でプログラミング 正しく動くことのチェックは必要 解答例と自分のやり方との比較が勉強になる 今日のお題 再帰的構造体
Microsoft PowerPoint - 5Chap15.ppt
第 15 章文字列処理 今日のポイント 15.1 文字列処理の基本 strcpy strcat strlen strchr などの使い方をマスターする strcpy はなんて読むの? 普通はストリングコピー C のキーワードの読み方に悩んだら下記サイトを参考 ( 前回紹介とは別サイト ) http://www.okakogi.go.jp/people/miwa/program/c_lang/c_furoku.html
cp-7. 配列
cp-7. 配列 (C プログラムの書き方を, パソコン演習で学ぶシリーズ ) https://www.kkaneko.jp/cc/adp/index.html 金子邦彦 1 本日の内容 例題 1. 月の日数配列とは. 配列の宣言. 配列の添え字. 例題 2. ベクトルの内積例題 3. 合計点と平均点例題 4. 棒グラフを描く配列と繰り返し計算の関係例題 5. 行列の和 2 次元配列 2 今日の到達目標
バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科
バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科 ポインタ変数の扱い方 1 ポインタ変数の宣言 int *p; double *q; 2 ポインタ変数へのアドレスの代入 int *p; と宣言した時,p がポインタ変数 int x; と普通に宣言した変数に対して, p = &x; は x のアドレスのポインタ変数 p への代入 ポインタ変数の扱い方 3 間接参照 (
プログラミング実習I
プログラミング実習 I 05 関数 (1) 人間システム工学科井村誠孝 [email protected] 関数とは p.162 数学的には入力に対して出力が決まるもの C 言語では入出力が定まったひとまとまりの処理 入力や出力はあるときもないときもある main() も関数の一種 何かの仕事をこなしてくれる魔法のブラックボックス 例 : printf() 関数中で行われている処理の詳細を使う側は知らないが,
今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること
C プログラミング演習 1( 再 ) 4 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順
Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]
if 文 (a と b の大きい方を表示 ) C 言語 Ⅰ の復習 条件判定 (if, 条件式 ) ループ (for[ 二重まで ], while, do) 配列 ( 次元 次元 ) トレース int a, b; printf( 整数 a: ); scanf( %d, &a); printf( 整数 b: ); scanf( %d, &b); //つのif 文で表現する場合間違えやすい どっちに =
Microsoft PowerPoint - lec10.ppt
今日の内容, とポインタの組み合わせ, 例題 1. 住所録例題 2. と関数とは. を扱う関数. 例題 3. のリスト とポインタの組み合わせ 今日の到達目標 自分で を定義する 自分で定義したについて, 配列やポインタを作成する データ型 基本データ型 char 文字 (1 文字 ) int 整数 double 浮動小数など その他のデータ型配列 データの並び ( 文字列も, 文字の並び ) ポインタ
Microsoft PowerPoint - CproNt02.ppt [互換モード]
第 2 章 C プログラムの書き方 CPro:02-01 概要 C プログラムの構成要素は関数 ( プログラム = 関数の集まり ) 関数は, ヘッダと本体からなる 使用する関数は, プログラムの先頭 ( 厳密には, 使用場所より前 ) で型宣言 ( プロトタイプ宣言 ) する 関数は仮引数を用いることができる ( なくてもよい ) 関数には戻り値がある ( なくてもよい void 型 ) コメント
第1回 プログラミング演習3 センサーアプリケーション
C プログラミング - ポインタなんて恐くない! - 藤田悟 [email protected] 目標 C 言語プログラムとメモリ ポインタの関係を深く理解する C 言語プログラムは メモリを素のまま利用できます これが原因のエラーが多く発生します メモリマップをよく頭にいれて ポインタの動きを理解できれば C 言語もこわくありません 1. ポインタ入門編 ディレクトリの作成と移動 mkdir
PowerPoint Presentation
プログラミング基礎 第 2 週 (4,5,6 回 ) 2011-10-07 出村公成 この資料の再配布を禁止します 予定 プログラミング入門 (45 分 ) 変数 入出力 分岐 演習 (90 分 ) タッチタイプ練習 統合開発環境 Codeblocksの使い方 教科書例題の打ち込みと実行 プログラミング入門 C 言語の簡単な例を体験 変数 入出力 分岐 プログラムの例リスト 2.1 改 #include
Microsoft PowerPoint - å®�æ−•試é¨fi3ㆮ対ç�Œ.pptx
C言語の繰り返し処理 for文と while文と do文 臼杵 潤 0) 準備 変数の加減算 int a, b=10; // a= a = 0; a = a+1; // a= a += 1; // a= // a= a ++; a = a + b; // a= a += b; // a= // a= a --; 下を1行ずつ実行すると それぞれ aの値はどう変わるか 0 1 2 3 13 23 22
ファイル入出力
C プログラミング Ⅱ の基礎 とは ファイルへデータを書き込んだり ( 出力 ), ファイルからデータを読み込んだり ( 入力 ) する C 言語では キーボードからの入力 画面への出力と同じようなコードで 処理を実現できる プログラム 入力 出力 ファイル 出力 入力 2 入出力の基本 ストリーム プログラム上で様々な装置への入出力を行う機構様々な入出力装置を統一的な方法で扱うことができる ハードディスクなどではファイルデータによって入出力が行われる
PowerPoint プレゼンテーション
講座を行う前に 自己紹介 僕と上回生について 1 年生同士で少しお話しよう! オリエンテーションの宿題 アルゴロジック http://home.jeita.or.jp/is/highschool/algo/index3.html どこまでできましたか? あまりできなかった人はこれから全部クリアしよう! 2016 年度 C 言語講座 第一回目 2016/6/11 fumi 今回の目標 プログラムを書いて実行するやり方を覚える
Taro-再帰関数Ⅲ(公開版).jtd
0. 目次 1 1. ソート 1 1. 1 挿入ソート 1 1. 2 クイックソート 1 1. 3 マージソート - 1 - 1 1. ソート 1 1. 1 挿入ソート 挿入ソートを再帰関数 isort を用いて書く 整列しているデータ (a[1] から a[n-1] まで ) に a[n] を挿入する操作を繰り返す 再帰的定義 isort(a[1],,a[n]) = insert(isort(a[1],,a[n-1]),a[n])
次に示す数値の並びを昇順にソートするものとする このソートでは配列の末尾側から操作を行っていく まず 末尾の数値 9 と 8 に着目する 昇順にソートするので この値を交換すると以下の数値の並びになる 次に末尾側から 2 番目と 3 番目の 1
4. ソート ( 教科書 p.205-p.273) 整列すなわちソートは アプリケーションを作成する際には良く使われる基本的な操作であり 今までに数多くのソートのアルゴリズムが考えられてきた 今回はこれらソートのアルゴリズムについて学習していく ソートとはソートとは与えられたデータの集合をキーとなる項目の値の大小関係に基づき 一定の順序で並べ替える操作である ソートには図 1 に示すように キーの値の小さいデータを先頭に並べる
Microsoft PowerPoint - prog04.ppt
プログラミング言語 2 第 04 回 (2007 年 05 月 14 日 ) 今日の配布物 片面の用紙 1 枚 今日の課題が書かれています 本日の出欠を兼ねています 1 今日やること http://www.tnlab.ice.uec.ac.jp/~s-okubo/class/language/ にアクセスすると 教材があります 2007 年 05 月 14 日分と書いてある部分が 本日の教材です 本日の内容
gengo1-11
関数の再帰定義 自然数 n の階乗 n! を計算する関数を定義してみる 引数は整数 返却値も整数 n! = 1*2*3*... * (n 1)*n である ただし 0! = 1 とする int factorial(int n) int i, tmp=1; if( n>0 ) for(i=1; i
Taro-ファイル処理(公開版).jtd
ファイル処理 0. 目次 1. はじめに 2. ファイル内容の表示 3. ファイル内容の複写 3. 1 文字単位 3. 2 行単位 4. 書式付き入出力 5. 文字配列への入出力 6. 課題 6. 1 課題 1 ( ファイル圧縮 復元 ) - 1 - 1. はじめに ファイル処理プログラムの形は次のようになる #include main() { FILE *fp1,*fp2; ファイルポインタの宣言
Microsoft PowerPoint - prog06.ppt
プログラミング言語 2 第 06 回 (2007 年 06 月 11 日 ) 今日の配布物 片面の用紙 1 枚 今日の課題が書かれています 本日の出欠を兼ねています 1 今日やること http://www.tnlab.ice.uec.ac.jp/~s-okubo/class/language/ にアクセスすると 教材があります 2007 年 06 月 11 日分と書いてある部分が 本日の教材です 本日の内容
PowerPoint Presentation
ファイルの入出力 芝浦工業大学情報工学科 青木義満 今回の講義内容 ファイル入出力 ファイルからのデータ読込み ファイルと配列 2 1 ファイルへのデータ書き込み ( 復習 ) ソースファイル名 :fileio1.c データをファイルに書き込み #include int main(void) { ファイルポインタ宣言 int student_id = 100; char name[
第9回 配列(array)型の変数
第 12 回 配列型の変数 情報処理演習 ( テキスト : 第 4 章, 第 8 章 ) 今日の内容 1. 配列の必要性 2. 配列の宣言 3. 配列変数のイメージ 4. 配列変数を使用した例 5. 範囲を超えた添字を使うと? 6. 多次元配列変数 7. 多次元配列変数を使用した例 8. データのソーティング 9. 今日の練習問題 多数のデータ処理 1. 配列の必要性 ( テキスト 31 ページ )
情報処理演習 B8クラス
予定スケジュール ( 全 15 回 ) 1 1. 終了 プログラミング言語の基礎 2. 終了 演算と型 3. 終了 プログラムの流れの分岐 (if 文,switch 文など ) 4. 終了 プログラムの流れの繰返し (do, while, for 文など ) 5. 終了 中間レポート1 6. 終了 配列 7. 終了 関数 8. 終了 文字列 ( 文字列の配列, 文字列の操作 ) 9. 終了 ポインタ
プログラミング基礎
C プログラミング Ⅱ 演習 2-1(a) BMI による判定 文字列, 身長 height(double 型 ), 体重 weight (double 型 ) をメンバとする構造体 Data を定義し, それぞれのメンバの値をキーボードから入力した後, BMI を計算するプログラムを作成しなさい BMI の計算は関数化すること ( ) [ ] [ ] [ ] BMI = 体重 kg 身長 m 身長
今までの復習 プログラムで最低限必要なもの 入力 ( キーボードから ファイルから ) 出力 ( 画面へ ファイルへ ) 条件分岐 : 条件の成立 不成立により 異なる動作をする 繰り返し : 一定の回数の繰返し 条件成立の間の繰返し 関数の定義 関数の呼び出し C ではそれ以外に ポインタ データ
C プログラミング演習 1( 再 ) 7 講義では C プログラミングの基本を学び演習では 実践的なプログラミングを通して学ぶ 今までの復習 プログラムで最低限必要なもの 入力 ( キーボードから ファイルから ) 出力 ( 画面へ ファイルへ ) 条件分岐 : 条件の成立 不成立により 異なる動作をする 繰り返し : 一定の回数の繰返し 条件成立の間の繰返し 関数の定義 関数の呼び出し C ではそれ以外に
char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く
変数 入出力 演算子ここまでに C 言語プログラミングの様子を知ってもらうため printf 文 変数 scanf 文 if 文を使った簡単なプログラムを紹介した 今回は変数の詳細について習い それに併せて使い方が増える入出力処理の方法を習う また 演算子についての復習と供に新しい演算子を紹介する 変数の宣言プログラムでデータを取り扱う場合には対象となるデータを保存する必要がでてくる このデータを保存する場所のことを
C 言語の式と文 C 言語の文 ( 関数の呼び出し ) printf("hello, n"); 式 a a+4 a++ a = 7 関数名関数の引数セミコロン 3 < a "hello" printf("hello") 関数の引数は () で囲み, 中に式を書く. 文 ( 式文 ) は
C 言語復習 C 言語の基礎 来週もこの資料を持参してください C 言語, ソースファイルの作成, コンパイル, 実行 1 C 言語 C 言語プログラミングの手順 とは, 計算機を動かす手順を記述したもの. 計算機に命令を与えて動かすには を作成する ことになる. C 言語はプログラミング言語の 1 個 手続き型言語に分類される. C/C++ は非常に多くの場面で使われる言語 C++ は C 言語をオブジェクト指向に拡張したもの
画像ファイルを扱う これまでに学んだ条件分岐, 繰り返し, 配列, ファイル入出力を使って, 画像を扱うプログラムにチャレンジしてみよう
第 14 回 応用 情報処理演習 ( テキスト : 第 10 章 ) 画像ファイルを扱う これまでに学んだ条件分岐, 繰り返し, 配列, ファイル入出力を使って, 画像を扱うプログラムにチャレンジしてみよう 特定色の画素の検出 ( テキスト 134 ページ ) 画像データが保存されているファイルを読み込んで, 特定色の画素の位置を検出するプログラムを作成しなさい 元画像生成画像 ( 結果の画像 )
