piyo rtfd

Similar documents
piyo0705B.rtfd

Microsoft Word - Cプログラミング演習(8)

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

基礎プログラミング2015

ポインタ変数

break 文 switch ブロック内の実行中の処理を強制的に終了し ブロックから抜けます switch(i) 強制終了 ソースコード例ソースファイル名 :Sample7_1.java // 入力値の判定 import java.io.*; class Sample7_1 public stati

JavaプログラミングⅠ

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 条件判断文 3 switch 文 switch 文式が case の値と一致した場合 そこから直後の break; までを処理し どれにも一致しない場合 default; から直後の break; までを処理する 但し 式や値 1

文字列操作と正規表現

Java講座

Microsoft PowerPoint - prog04.ppt

ポインタ変数

Taro-ファイル処理(公開版).jtd

fuga scanf("%lf%*c",&fuga); 改行文字を読み捨てる 10 進数の整数 おまじない取り込んだ値を代入する変数 scanf( %d%*c,&hoge); キーボードから取り込め という命令 1: scanf 1 1: int double scanf %d %lf printf

計算機プログラミング

プログラミング基礎

PowerPoint プレゼンテーション

JavaプログラミングⅠ

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

Copyright c 2008 Zhenjiang Hu, All Right Reserved.

3. 標準入出力

02: 変数と標準入出力

02: 変数と標準入出力

本サンプル問題の著作権は日本商工会議所に帰属します また 本サンプル問題の無断転載 無断営利利用を厳禁します 本サンプル問題の内容や解答等に関するお問 い合わせは 受け付けておりませんので ご了承ください 日商プログラミング検定 STANDARD(C 言語 ) サンプル問題 知識科目 第 1 問 (

r03.dvi

Microsoft PowerPoint - ruby_instruction.ppt

プログラミング基礎

プログラミング実習I

スライド 1

ポインタ変数

Microsoft Word - no103.docx

ohp03.dvi

Microsoft Word - Cプログラミング演習(3)

PowerPoint プレゼンテーション

Microsoft Word - 3new.doc

C プログラミング 1( 再 ) 第 4 回 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 1

Microsoft Word - VBA基礎(3).docx

C 言語第 3 回 2 a と b? 関係演算子 a と b の関係 関係演算子 等しい a==b 等しくない a!=b より大きい a>b 以上 a>=b より小さい a<b 以下 a<=b 状態 真偽 値 条件が満たされた場合 TRUE( 真 ) 1(0 以外 ) 条件が満たされなかった場合 F

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文

文字列 2 前回の授業ではコンピュータ内部での文字の取り扱い 文字型の変数 文字型変数への代入方法などを学習した 今回は 前回に引き続き 文字処理を学習する 内容は 標準入出力 ( キーボード ディスプレイ ) での文字処理 文字のファイル処理 文字を取り扱うライブラリ関数である 標準入出力 Lin

情報処理演習 B8クラス

第12回 モナドパーサ

問 2 ( 型変換 ) 次のプログラムを実行しても正しい結果が得られない 何が間違いかを指摘し 正しく修正せよ ただし int サイズが 2 バイト long サイズが 4 バイトの処理系での演算を仮定する #include <stdio.h> int main( void ) { int a =

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

講習No.9

解答編 第 9 章文字データの取り扱い 演習問題 9.1 文法事項 1 ) コンピュータにおける 文字データの取り扱いについて説明しなさい コンピュータでは 文字に整数の番号を割り当てて ( コード化して ) 文字コードとして扱います 実際に用いられる文字コードとして ASCII コード EUC コ

Java プログラミング Ⅰ 3 回目変 数 今日の講義講義で学ぶ内容 変数とは 変数の使い方 キーボード入力の仕方 変 数 変 数 一時的に値を記憶させておく機能 変数は 型 ( データ型 ) と識別子をもちます 2 型 ( データ型 ) 変数に記憶する値の種類変数の型は 記憶できる値の種類と範囲

8 / 0 1 i++ i 1 i-- i C !!! C 2

* ライブラリ関数 islower(),toupper() を使ったプログラム 1 /* 2 Program : trupper.c 3 Student-ID : K 4 Author : TOUME, Kouta 5 Comments : Used Library function i

プログラミングA

Microsoft PowerPoint - prog03.ppt

program7app.ppt

ファイル入出力

1. 入力した文字列を得る 1.1. 関数 scanf() を使う まずは関数 scanf() を使ったプログラムを作ってみましょう 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: #include<stdio.h> #define SIZE 128 main(

講習No.8

プレポスト【解説】

コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol

プログラミングA

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

PowerPoint プレゼンテーション

slide5.pptx

Microsoft PowerPoint - class04.ppt

Prog1_10th

デジタル表現論・第4回

Microsoft PowerPoint - program.ppt [互換モード]

Microsoft PowerPoint - CproNt02.ppt [互換モード]

ポインタ変数


初歩のC言語ターミナル_2014_May.pages

Prog1_6th

Functional Programming

memo

プログラミング基礎

JavaプログラミングⅠ

新版 明解C++入門編

Prog1_10th

解きながら学ぶC++入門編


kiso2-09.key

I. Backus-Naur BNF : N N 0 N N N N N N 0, 1 BNF N N 0 11 (parse tree) 11 (1) (2) (3) (4) II. 0(0 101)* (

B演習(言語処理系演習)第一回

1. 入力した正の整数を降順に並べ換えて出力するプログラムを作成せよ プログラムは個別にコンパイルし make コマンドで実行すること 入力データは 50 以下とし 以下の数が混在しているとする 16 進数 : 先頭 1 文字が x または X( エックスの小文字か大文字 ) 8 進数 : 先頭 1

Microsoft Word - no11.docx

PowerPoint プレゼンテーション

Cプログラミング1(再) 第2回

ポインタ変数

このルールをそのまま正規表現として書くと 下記のようになります ^A[0-9]{2}00[0-9]{3}([0-9]{2})?$ ちょっと難しく見えるかもしれませんが 下記のような対応になっています 最初 固定 年度 固定 通番 ( 枝番 ) 最後 ルール "A" 数字 2 桁 0 を 2 桁 数字

Microsoft Word - Training10_プリプロセッサ.docx

Microsoft PowerPoint - kougi6.ppt

Microsoft Word - report#8.docx

基礎情報処理 I (文字型)

sinfI2005_VBA.doc

gengo1-2

PowerPoint プレゼンテーション

July prog11-02.c /*, */ /* $Id: prog11-02.c,v :48:07+09 naito Exp $ */ #include <stdio.h> #define N 10 int main(int argc, cha

tuat1.dvi

Microsoft Word - no15.docx

kiso2-03.key

I. Backus-Naur BNF S + S S * S S x S +, *, x BNF S (parse tree) : * x + x x S * S x + S S S x x (1) * x x * x (2) * + x x x (3) + x * x + x x (4) * *

Microsoft Word - Javacc.docx

Transcription:

Python.use(better, by="k&r") 伝統的な制御構造に代わる for 文を使って 同等の関数 atoi を実現できます # for novice 6 atoi 1 文字列から整数を得るには 伊藤うさぎ Python には 組み込み関数 int() があるので atoi() を実現するには及びません しかし 同等の機能を実現してみるのも一興です 6 では K&R を模倣したもの を 7 8 では Python ならでは実現方法を示します 3.5 節では 標準ライブラリー関数 int atoi(const char *s) を模して 文字 列を int 型の値に変換する事例を紹介しています!K&R, p.61" #include <ctype.h> int atoi(char s[]) { int i, n, sign; for (i = 0; isspace(s[i]); i++) ; sign = (s[i] == '-')? -1 : 1; if (s[i] == '+' s[i] == '-') for (; isdigit(s[i]); i++) n = 10 * n + (s[i] - '0'); ; /* skip white space */ /* skip sign */ K&R, p.61 "The structure of the program reflects the form of the input:" と あるように プログラムの構造は 入力形式を反映した ものとなります 1 空白文字を読み飛ばして 2 符号を取り出して 3 整数部を変換する という段階を経て 文字列を整数値に変換します このとき 整数に変換できない文字 が出てきたら そこで処理を中断します 標準ライブラリー関数 isspace(c) は空白文字かどうかを isdigit(c) は十進数 字かどうかを判定して その結果が真なら非零の値を 偽なら 0 を返します C言語における for 文は ループ変数を使って 任意の要素を順に処理したいとき に多用されます たとえば for (i = 0; i < n; i++) というコードの断片は n 個の要素を順に処理するという 典型的なイディオムの1つです Python では この i = 0 if not e.isspace(): break if s[i] == "-": sign = -1 else: sign = 1 if s[i] == "+" or s[i] == "-": n = 10*n + (ord(e)-ord("0")) # skip white space # skip sign Python における for 文は コレクション内の各要素を順に処理したいときに多用 されます たとえば というコードの断片は 文字列 s 内の各文字 e を順に処理するという 典型的なイディオムの1つです str 型の文字列に対して isspace() は空白文字かどうかを isdigit() は十進数 字かどうかを判定して 文字列を構成するすべての文字が条件を満たすなら True を 条件を満たさない文字が1つでもあるなら False を得ます 1 空白文字 e を読み飛ばすごとに 変数 i の値が1つずつ増えます その文字 が 空白文字 not e.isspace() でないとき for ルーブから抜けます 2 符号を取り出したときには その値を変数 sign に保持します 3 整数部を変換するときには 部分文字列 s[i:] が対象となります 組み込み関 数 ord(c) を使って 各文字 c に対応する ASCII コードの値を獲得します その文字 が 数字 not e.isdigit() でないとき for ルーブから抜けます C言語では 文字列の末尾に '\0' があるので これを for ルーブから抜けるとき の条件式に利用できます Python では 文字列の内部表現を気にする必要がなく for 文を使って 情報隠蔽 を実現できます ひよ子のきもち 2007/06/11

i = skip_white_space(s) sign = get_sign(s, i) i = skip_sign(s, i) skip_white_space get_sign, skip_sign convert_int isign n def skip_white_space(s): i = 0 if not e.isspace(): break return i def get_sign(s, i): if s[i] == "-": sign = -1 else: sign = 1 return sign def skip_sign(s, i): if s[i] == "+" or s[i] == "-": return i def convert_int(s, i): n = 10*n + (ord(e)-ord("0")) s = skip_white_space(s) sign = get_sign(s) i = skip_sign(s, 0) def skip_white_space(s): return s.strip() strip() def get_sign(s): return (1, -1)[s.startswith("-")] startswith(prefix) prefix True/False 1/0 1/0?: "-" def skip_sign(s, i): return s[i] in "+-" in True/False 1/0 1/0 +/-

n = convert_int(s, s[0] in "+-") strip startswith, in convert_int atoi convert_int s = skip_white_space(s) sign = get_sign(s) i = skip_sign(s, 0) '\0' for atoi atof

int double(const char *s) double!k&r, p.71" #include <ctype.h> double atof(char s[]) { double val, power; int i, sign; for (i = 0; isspace(s[i]); i++) /* skip white space */ ; sign = (s[i] == '-')? -1 : 1; if (s[i] == '+' s[i] == '-') for (val = 0.0; isdigit(s[i]); i++) val = 10.0 * val + (s[i] - '0'); if (s[i] == '.') for (power = 1.0; isdigit(s[i]); i++) { val = 10.0 * val + (s[i] - '0'); power *= 10.0; return sign * val / power; atoi() atof() def atof(s): val = convert_int(s, s[0] in "+-") val, power = convert_fraction(val, skip_point(s, ".")) return sign * val / power skip_point convert_fraction atoi atof convert_fraction def convert_int(s, i): n = 10*n + decimal(e) decimal() def skip_point(s, dot): ss = "" if dot in s: ss = s.split(dot)[1] return ss split(sep) sep 1 "." "" def convert_fraction(v, s): val, power = v, 1.0 val = 10.0*val + decimal(e) power *= 10.0 return val, power convert_int v val, power

def decimal(n): return ord(n)-ord("0") convert_int/skip_point/convert_fraction convert_int 0 skip_point "" convert_fraction v1.0 def atof(s): integer, fraction = split_point(s, sign="+-", dot=".") val = convert_integer(integer) val, power = convert_fraction(val, fraction) return sign * val / power atof() def split_point(s, sign, dot): s = skip_sign(s, sign) # Please, look at me! integer, fraction = s, "" if dot in s: integer, fraction = s.split(dot) return integer, fraction def skip_sign(s, sign): return s[s[0] in sign] split_point sign dot integer, fraction skip_sign() def convert_integer(s): n = 10*n + decimal(e) convert_ints atoi/atof int/float