[No.10 C言語 一文字入力、プログラムって?流れって? ] [No.11 Excel使いに負けた日...ワークシート関数TRIM編] [No.12 Access97 SP_CNV変更依頼...を題材にして] [No.13 C言語 制御文IFその1 and 昔の話...] [No.14 第二回 反省会?反響ランキング と クリック広告について] |
No.10 | 1999/11/07 C言語 一文字入力、プログラムって?流れって? |
[ページTOPへ戻る] |
<C言語 一文字入力、プログラムって?流れって?> 目次 1.はじめの挨拶 2.お前は、ソフトバンクのまわしものか? 3.一文字入力 4.プログラムって?流れって? 5.おわりの挨拶 ---------------------------------------------------------------------------- /* * 1.こんにちは */ C言語の解説を待っていた方、お待たせしました。 今回、一文字入力とIf文を解説します。 サンプルや解説にキレがなかったら、 遠慮なく、ほどほどに、指摘メール・質問メール下さい。 ^^^^^^^^^^^^^^^^^^^^^ ↑日本語、変じゃねぇか? あっ、大丈夫・大丈夫、、今回の解説より変じゃないから、、、 わかったから、さっさと始めろよ、、、ハイ。 /* * 2.お前は、ソフトバンクのまわしものか? */ フリーのC言語コンパイラー、 LSI C-86 v3.30c 試食版、 C MAGAZIN(ソフトバンク)の付録CD中に としか、書きませんでしたが、 下記の場所から、ダウンロードできますよ とメールをいただきました。 エル・エス・アイ ジャパン株式会社 LSI C-86 v3.30c 試食版 http://www.lsi-j.ab.psiweb.com/freesoft/index.html もしかして、Cマガ買ってしまった人、ゴメンナサイ。 でも、雑誌の記事、何かの役に立ったでしょ。。。 おいおい、開き直ったよ、、手がつけられないなぁもう。 正気に戻って、先に進みます。 /* * 3.一文字入力 */ いきなり、 一文字入力のサンプルを以下に記述します。 ( hosoku/010/test10.lzh にサンプル置いておきます ) ここでは標準関数getch()を使用しています。 filename : D:\NO10\TEST10_1.C 1: /* 2: * 一文字入力 3: */ 4: #include5: #include 6: 7: /* メイン処理 */ 8: int main() { 9: 10: char moji; /* 文字変数宣言 */ 11: 12: moji = getch(); /* 1文字入力 */ 13: printf("入力された文字は[%c]です\n", moji); 14: printf(" codeは16進[%x] 10進[%d]です\n", moji, moji); 15: printf(" codeは16進[%X] 10進[%d]です\n", moji, moji); 16: 17: return 0; 17: } 実行結果までの道のり、、、 まず、ソースファイルをメモ帳などで、作成します。 次に、DOSプロンプトから、前回作成したバッチファイル、 SETCを起動して、環境をセットします。 (Autoexecに組み込んだ人は、やらなくて、OKです) D:\NO10>c:\setc D:\NO10>PATH=C:\lsic330c\BIN;C:\WINDOWS;C:\WINDOWS\COMMAND D:\NO10>set TZ=JST-9 次に、lcc test10_1.c と入力し、リターンキーを押します。 ソースファイルがコンパイルされます。 D:\NO10>lcc test10_1.c lld @link.i 完成後、test10_1 リターンで、プログラムを実行します。 D:\NO10>test10_1 何か、キーを押すと、下記のようなメッセージがでます。 (ここでは、tキーを押した) 入力された文字は[t]です codeは16進[74] 10進[116]です codeは16進[74] 10進[116]です 解説 ア.インクルードファイルの指定 ここでは、標準関数、printfとgetchを使用しているので、 4: #include 5: #include 対応した、 , を指定します。 えっ何なんで? 標準の関数を使うときは、指定しないといけないんですよ。 そうなんだ、、とりあえず、決まりごととして、おぼえておくよ。 どうも。 あっ、なんで、getchって関数?だと、conio.hが必要ってわかるの? う〜ん、、、マニュアル・サンプルを見ると、書いてあるので、 対応するヘッダファイルを選んでください。 何か関数一覧なんて、あると、嬉しいんだけどなぁ、、、 暇見て、探しておきますよ。 ヨロシクネ。 イ.変数の定義 キーボードから文字を受け取りたいので、 10: char moji; /* 文字変数宣言 */ で、Char型の変数mojを定義します。 ウ.キーボードから、一文字受け取る getch関数を使用して(getchのリターン値で)、 文字を受け取ります。 12: moji = getch(); /* 1文字入力 */ 変数mojiにgetch()の処理結果(キーコード)が入ります。 エ.結果表示 結果を画面に表示します(変数mojiの中身を画面に出力) 13: printf("入力された文字は[%c]です\n", moji); 14: printf(" codeは16進[%x] 10進[%d]です\n", moji, moji); 15: printf(" codeは16進[%X] 10進[%d]です\n", moji, moji); これから、よく、お世話になるprintf関数で、結果を画面に出力します。 %c --> コードに対応する文字を表示 (キャラクタコード表って、みたことありますか?) %x --> 16進数で値を表示 %d --> 10進数で値を表示 簡単に書くと、こんな感じです。 枠外解説・グチ -- おおスゴイと感動しましたか?面白いですか? 実際にやってみて、スゴイと感動しましたか? 感動まではいかなくても、好きですか?面白いですか? いろいろな人に教えていて、わかりますが、 コンピュータが好き・プログラムが好きなヤツ・お嬢ちゃんほど、 飲み込み速いし、できるプログラマーになっていく気がします。 給料もらってやっているだけの職業プログラマー?だと、 なんか仕事も事務的なような。。。 いつも、遊んでいるテメエ(Ken3)より会社のためになってるって、、、 ごもっともなご意見です。。。 /* * 4.プログラムって?流れって? */ プログラムって言うと、何を思い浮かべますか? 競馬のレーシングプログラム、、、運動会のプログラム、、、など、、、 運動会のプログラムなどは、順番に上から下に進んでいきます。(競馬の出走順も) ・開会式 ・100メートル走 ・玉入れ ・昼休憩 ←あれ、もう昼? ・リレー ・閉会式 ←もう、終わり、、、騎馬戦ないの?...気にしないで、、 開会式から閉会式まで、上から下に、流れていきます。 一文字入力のプログラムも、下記のような順序で、流れてます。 ・変数の定義(開会式?) ・一文字入力 ・結果表示 ・return 0; (閉会式?) と、一直線に流れてました。 まぁ、通常は、そんな感じですが、 いつも同じことをするほど、(いつも同じじゃ、使えないでしょ) プログラムは甘くなく、 変数の状態によってやること変えたり、(腹へったから、玉入れ中止、昼にする?) 繰り返したり、流れを組み合わせます。 ア.基本は、上から下に流れます。 運動会のプログラムのように イ.分岐する場合 高校野球などのコールド試合(ルール知らないので、細かい点差、間違ってたら、、) 通常は、1回から9回まで進みます。 1回 2回 ・ ・ 5回 ここで点差が10点以上ならコールドゲームで試合終了 ・ ・ 9回 得点の多いチームの勝ち 同点の場合は延長戦へ 10回 どちらかが、多く得点を取るまで続く ・ ・ 18回 引き分け再試合 など、ある条件(ここでは、イニング回数と得点差ですね) で実行する作業(コールドなのか、、延長なのか、、再試合、、) を判断する。 ウ.繰り返し 分岐と似ているのですが、繰り返し処理で(無限ループもある?) 表現悪いですが、今風のたとえ話で、 ストーカー君が好きな子に start ↓ 付き合ってください ↓ イヤダ ↓ ここで彼女は考える、そろそろ、警察につきだそうか、家族にそうだんするか (10回ぐらい付きまとわれた、、警察に相談-->ストーカー君end逮捕) ↓ startへ戻るを繰り返す... (まったくストーカーってヤツは..頭の中の判断がおかしい、、、なんてね) まぁ、冗談ですが、プログラムは、どんなものでも、 処理の流れ、分岐の繰り返し、組み合わせだと思います。 なんか、少し、ズレてる気がするけど、 今後のIf,while,forの講座を読んだ時、思い出してください。 /* * 5.おわりの挨拶 */ メルマガで、図が書けないのが、ツライ。 図が書ければ、もうすこし、わかりやすく、説明できたんだけど。 じゃ、ホームページにGIFで載せたらイイジャン。 まだ容量、あまってるでしょ。 すぐわかる、言い訳こくなよコラ。 あっ、バレました?やっぱ。 実は、時間が無かったんですよ。。。すみません。次回は。。。 客先についたウソ・言い訳も、バレます、すぐに、、、 相手もそんなにバカじゃないんだし、、、 正直に話したほうが許してくれるかも? (絶対に、許してくれないほうが多いと思うけど、、、) 新人君のついたウソも先輩にバレます(←これホント、新人さん達は注意してね) Ken3「テストした?」 新人 「はい、しました」 Ken3「ハイ、これやり直し」(心の中で、うそつくなよ..真剣さが足りないんだよ) ここでガツンと言いたい三流プログラマーのKen3でした。。。 では、また。。。 次回は、言い訳しないように、ガンバル(つもりです)
No.11 | 1999/11/08 Excel使いに負けた日...ワークシート関数TRIM編 |
[ページTOPへ戻る] |
<Excel使いに負けた日...ワークシート関数TRIM編> 目次 1.はじめの挨拶 2.それは、土曜出勤のことだった 3.「ExcelのTrim関数でできるよ」そんなバカな、、 4.飲み会でも、技術話? 5.おわりの挨拶 ---------------------------------------------------------------------------- /* * 1.こんにちは */ こんにちは、今週も、始まりますね。(平和な一週間でありますように、、、) 今回は、先週土曜日、 Excel使いと戦って、負けた?ことを中心に書いていこうと思います。 *↑隣の部(データサービス)のやさしい部長さんです。 負けたのに、飲み代も1000円だったしねぇ。 原因は、思い込みだったけど、、、う〜ん、くやしい。 前置きは、これくらいにして、そろそろ、始めます。 /* * 2.それは、土曜出勤のことだった */ 先週、土曜日、出勤してました。 システム課のメンバー帰ったし、 一人になったので、メールチェックを行う。 *まったく、会社の設備を使って、、、とんでもないヤツだ。。。 おっ、メール来てるジャン。(チョット嬉しい) なになに、がんばってください、、ハイ、ガンバリマスヨなんとか、 次は、 >SP_CNV.MDBで姓と名の間に >半角スペースが複数存在(3個以上)する場合 >全角スペースと半角スペースが混在する場合 >全角スペースが複数存在(2個以上)する場合 >はどう処理すれば良いでしょうか? >お知恵をお貸し下さい。 あっ、やられた、、、データの想定ミスだぁ。。。 確かに、半角スペースが3つだと、全角2つになってしまう。。 例)匿名 希望-->匿名□□希望 となってしまう。 ちぇ、またミスっちゃったなぁ。まぁいっかと思いつつ、帰る準備をする。 隣のデータサービス課(データパンチ関係の仕事してます)に システム課帰りますと挨拶をしに行きました。2名まだ残ってました。 部長「あかしやき3人で食べに行かない?」と飲みの誘い。 何を思ったか、部長・スパーバイザーさんに、 「データ処理関係で、姓名間全角スペース一個とか指定って、よくあるんですか?」 と聞いたところ、 SP「よくあるよ、半角スペース2個じゃなくて、全角1つにしてとか」 と答えが返ってきました。 ここでやめときゃいいのに、 「半角の変換プログラムサンプルで作ったら、半角3つ入った時、処理できなくて」 と話を続けてしまった、、、 隣に座っていた、部長が一言、 「ExcelのTrim関数でできるよ」 と悪魔のささやき???(ほんとは、親切なので、天使の助言かな?) これが、長い土曜日の始まりだった、、、 /* * 3.「ExcelのTrim関数でできるよ」そんなバカな、、 */ 心の中、で、できないでしょ、Trim関数じゃ、、、左右のスペース取るだけじゃないの? と思い、「trimって、左右のスペース取るだけじゃないの?」と言葉の砲撃? 部長「じゃ、やってみよう」とパソコンの電源を入れる。 しばらくするとWin98のロゴ、 Excelを立ち上げて、データと関数を入れる。 A列 B列 1 匿名 希望 =trim(a1) --> 匿名 希望 2 匿名□□希望 =trim(a2) --> 匿名□希望 あっ、なんで中のスペースが取れるの?と驚く。。。 心の中では、絶対できない、、、飲み代カケてもいいと思っていた。 (カケは勝って負けても嫌いなので、普段はやらないのですが、 そんな私がカケけたくなるほど、自分の中では絶対の自信だった) 動揺しつつ、「半角3つを全角1つにしたいので」と言ってしまった。 Excel使いの部長には、なんでも無い攻撃で、 「=jis(trim(a1))でできる」 とあっさり、返された。 おみごと、、、でした。。。 Excel使いに負けた、、、と思いながら、飲みに行く。。。 枠外開設・グチ --- 思い込みとExcelワークシート関数 Excelワークシート関数とVBAの関数、 同名の関数でも動作が違うみたいです。 みなさんも、変な思い込みは無くして、相手の言葉を良く聞きましょう。 飲み代、カケなくてよかったなぁ、、、ほっとしてます。 だから、テメエは(思い込みの激しいKen3は)、 勝負ごと弱いんだよ。 ハイ、了解。ゴメンネ。 ちなみに、VBAだと、真中のスペース取れません、安心?してください。 Sub Macro1() Dim a As String a = "匿名 希望" MsgBox Trim(a) End Sub だと、中のスペースはそのままで、表示されます。 Excelのテスト VBAテストモジュール テストのブックはここから hosoku/011/index.html /* * 4.飲み会でも、技術話? */ 普通なら、3の敗戦で、マルマガ終わるんだけど、 飲み会でも技術話?の続きありました。 飲んでる時、やさしい部長より、 Excelで不思議な、質問、ありました。 IF(B5>"17:00","残業","") だと、判断できないと、、、 って、飲んでる時、言われてもなぁ... B列 C列 5行 18:00 =IF(B5>"17:00","残業","") 6行 18:00 =IF(B6-"17:00">0,"残業","") 7行 18:00 =IF(B7>"17:00"+0,"残業","") 8行 18:00 =IF(B8>time(17,0,0),"残業","") 5行目の=IF(B5>"17:00","残業","") ですんなり、できないみたいです。 なんか、あってる?ぽいけどなぁ。 で、 苦肉の策?で、 6行目の=IF(B6-"17:00">0,"残業","") みたいに、17時を引いて、0以上だったら に式を変更したらうまくいったらしいです。 また、7行目みたいに、+0(なんで0たすの?) を入れると、思い通り、動作します。 その時、飲んでたので(言い訳?) #17:00#と囲えば、=IF(B5>#17:00#,"残業","") 日付型になるからOKでは と答えたのですが、本日、やってみたら、これは、ウソでした。 *#はVBAだけみたいです、、、ワークシート上はエラーになります。 お返しをしようと、#で囲うを教えたんだけど、、また、裏目でした。 だから、確認してから、答えようよ、、はいはい。。。 話は、戻って、 キレイ?に書くと、8行目のTime関数を使って、 時間(シリアル値)を返して、比較するのが良いみたいです。 "17:00"だけだと、時間と文字列を比較するので、ダメ。 b5(時間) - "17:00"(文字列)は、自動的に時間の引き算してくれるのでOK "17:00"(文字列) + 0(数値)は、なぜか結果が時間になる?のでOK お行儀よく書くなら、Time関数を使ってtime(時,分,秒)を使います *VBAのタイム関数とは、動作が違うので、注意してください。 枠外解説・グチ -- Excel97...もう少し賢ければ、、 Excel2000だと、=IF(B5-"17:00">0,"残業","")で良いかもしれないので、 インストールしている人は、結果、教えてください。 ken3のExcel97では、ダメでした。 VBA 日付型 (Date) ヘルプから、引用 --- 日付型 (Date) の変数は、IEEE 64 ビット (8 バイト) の浮動小数点数の変数です。西暦 100 年 1 月 1 日〜西暦 9999 年 12 月 31 日の範囲の日付と、0:00:00 〜 23:59:59 の 範囲の時刻を表すことができます。日付型の変数には、日付リテラルとして認識可能な任 意の値を代入できます。日付リテラルの形式は、#1993 January 1# または #93 Jan 1 # のようにシャープ記号 (#) で囲む必要があります。 ワークシート関数 TIME のヘルプから、引用 ---- 指定された時刻に対応するシリアル値を返します。計算結果のシリアル値は、0 〜 0. 99999999 の範囲にある小数値で、0:00:00 (午前 0 時) から 23:59:59 (午後 11 時 59 分 59 秒) までの時刻を表します。 書式 TIME(時, 分, 秒) 時 時を表す数値を 0 〜 23 の範囲で指定します。 分 分を表す数値を 0 〜 59 の範囲で指定します。 秒 秒を表す数値を 0 〜 59 の範囲で指定します。 使用例 ダブル クォーテーション (") は、戻り値が文字列であることを表します。 TIME(12,0,0) = 0.5 (正午に対応) TIME(16,48,10) = 0.700115741 (午後 4 時 48 分 10 秒に対応) /* * 5.おわりの挨拶 */ 長い?土曜日が終わって、日曜日、メルマガ書いてます。 ぜったいできる、、、と言って飲み代かけなくて、 よかったなぁ、、の結果レポートでした。 *何かの参考になれば、幸いです。。。 なんか、疲れが貯まったような。 まぁ、飲み代1000円で、いろいろな発見あったし、良かったかな? でも、飲んでる時は、楽しい話をしましょうよ、、技術話じゃなくて。 やさしい部長に感謝の三流プログラマーKen3でした。。。 では、また。。。 次回は、Excel使いに勝った話をしたいですねぇ。 *今度は、今風・流行り言葉のリベンジだぁ〜、、、と変な気合を入れる。 返討ちにあわないでね、、、はい。。。
No.12 | 1999/11/09 Access97 SP_CNV変更依頼...を題材にして |
[ページTOPへ戻る] |
<Access97 SP_CNV変更依頼...を題材にして> 目次 1.こんにちは 2.現バージョンの考え方と問題点 3.問題点を考慮した、新バージョン 4.おわりの挨拶 ---------------------------------------------------------------------------- /* * 1.こんにちは */ こんにちは。 匿名さんより、Access関係で出したサンプル、 SP_CNVの質問、いただきました。 質問内容 >漢字の時は「匿名 希望」姓と名の間は全角スペース一つで、半角(ア >ルファベットの場合(Tokumei Kibou)、半角カタカナ(トクメイ キ >ボウ(半角カナだと文字化けしますので、全角で表記します))の場合 >は姓と名の間に半角一つにする場合のやり方を教えて下さい。 >お願いします。 今回は、これを題材にして、 いつものように、AB型で気分屋のKen3が、一人二役で回答します。 *別なやり方を思いついた人、 イヤこれは違う、、と一緒に毒舌したい人は、 メール送ってください。 またまた、C言語から離れてしまった、、、、、、、 /* * 2.現バージョンの考え方と問題点 */ No.006で書いたサンプル、簡単に説明します。 ---- Public Function SP_Cnv(moji) As String Dim n As Integer Dim RET As String Dim ChkString As String RET = "" 'リターン値の初期化 '文字数分ループする For n = 1 To Len(moji & "") ChkString = Mid(moji, n, 1) If ChkString = " " Then '半角スペースかチェック RET = RET & " " '全角スペースをプラスする If Mid(moji, (n + 1), 1) = " " Then '次の文字がスペースがチェック n = n + 1 'ループカウンタを小細工 End If Else RET = RET & ChkString 'スペース以外の時、そのままプラスする End If Next n SP_Cnv = RET End Function ---- 関数の処理イメージとしては、 受け取った文字を左から1文字毎調べ、 半角スペースなら、全角スペースに置き換えます。 同時に、半角2個を全角1つにしたいために、 次の文字が半角か、チェックして、半角の場合、文字を飛ばしています。 ---- この方法だと、以下の問題点か発生します ア.半角スペースが3つの時、間の全角が2つになってしまう 例)匿名 希望 --> 匿名□□希望 123 あっ、あれ、、、なんで? アレじゃねえだろ、、、データが半角1つか2つとしか考えてねぇから、 3つの場合、全角2つに変換されちゃったんだろ、、、 もっと、実際のデータは汚い?って考えなきゃ イ.せっかく英字は変換されないのに、スペースは全角になる 英字や半角カナを漢字に変換したくないために、 strconv(a,vbwide)関数使わないで関数を自作しているのに、 間のスペースが全角になってしまう 例)Kibou Tokumei --> Kibou□Tokumei あっ、良く考えたら、抜けてますね。 抜けてますねじゃねぇだろ、、、チョット考えれば(使用者の立場になって) わかるだろ、、、 /* * 3.問題点を考慮した、新バージョン */ う〜ん、、データって、奥が深いな、、と思いつつ、 問題点を考慮した処理を考える。 --- 発想を半角スペースを見つけたら、全角スペースに置き換え処理をしよう から 半角・全角スペースどちらか見つけたら、 氏名を、姓と名に分ける 間に半角・全角どちらを入れるか判断するために、 一番左側の一文字を取りだし、サイズを判断。 サイズが1なら、半角カナ・英数字と判断し、 半角スペースに、、2バイト(漢字)なら全角スペースにする 間に一つスペースを+し、文字列を完成させる。 に発想を変えます。 下記に変換後のサンプルを載せます。 --- ホームページに圧縮して置いておきます。よかったらダウンロードしてください。 Public Function SP_Cnv(moji As Variant) As Variant Dim n As Integer 'ループカウンタ Dim RET As Variant 'リターン値 Dim ChkString As String 'チェックする文字 Dim strSEI As String '姓 Dim strMEI As String '名 Dim strSPC As String 'スペース RET = moji 'リターン値の初期化 '文字数分ループする 途中で、スペースが現れたら、分割処理を行う For n = 1 To Len(moji & "") ChkString = Mid(moji, n, 1) '半角スペース 及び 全角スペースかチェック If ChkString = " " Or ChkString = " " Then '姓名を分ける strSEI = Trim(Left(moji, n)) '左からn文字切り取り、空白を取って代入 strMEI = Trim(Mid(moji, n, 255)) 'n文字目から255文字切取り空白を取る '漢字で入力されているか、チェックし、スペースの種類を判断 '左側の一文字を取りだし、バイト数を判断、、、 If LenB(StrConv(Left(strSEI, 1), vbFromUnicode)) = 1 Then strSPC = " " '半角スペースを代入 Else strSPC = " " '全角スペースを代入 End If RET = strSEI & strSPC & strMEI 'スペースをプラスし、リターン値を作る Exit For '処理を抜ける End If Next n SP_Cnv = RET End Function --- で、できるの? た、たぶん。。。できます。 今、言っていい? はい、どうぞ、 3つに区切られてたら、どうなるの? 例)Tokumei Kibou Desu 氏名なんだから、、日本人は大丈夫でしょうキット。。。 *サンプル作ってから、また、気が付きました。 --- newconv.lzh --- 枠外解説・グチ -- LenB , Unicode a="漢字" ? lenb(a) --> 4バイト、、当然でしょ b="KA" ? lenb(b) --> 4バイト、、なんで? 私、ハマリましたが、有名な話みたいですね。 ?マークの人は、Unicode、ヘルプで見てください。 勉強になりますよ。。。 なんでテメエが解説しないんだ、あっ、手間取りそうだからだろ? バレました、、、今日はこのへんでカンベンしてください。。。 (どうしても?の時は、メールでリクエストしてください) PS. IsNull関数があって、IsKanji関数が無いのは、、 作ってほしいなぁ、、それとも、私の見落とし? /* * 4.おわりの挨拶 */ 素朴な疑問、これは、コッチの方がいいですよなどのアドバイス、 何かありましたら、気軽に まで、メール下さい。 新たな、毒舌まってます。 Ken3より では、また。。。 次こそは、Cの講座(If)始めるぞ、、、 *おいおい、いまさらそんなこと言っても、みんな、あてにしてないって.... Access VBAこのまま続けたほうがいいって、 そのうち言われるよキット。。。
No.13 | 1999/11/10 C言語 制御文IFその1 and 昔の話... |
[ページTOPへ戻る] |
<C言語 制御文IFその1 and 昔の話...> 目次 1.はじめの挨拶 二兎を追うものは、一兎も〜 2.if文の文法? 3.if文(条件分岐) 例)文字の判断 4.if,else文(条件分岐) 例)Y,y の判断 5.おわりの挨拶 ---------------------------------------------------------------------------- /* * 1.こんにちは */ C言語の解説を待っていた方、お待たせしました。 やっと、今回、制御文Ifの一回目?を解説します。 サンプルや解説にキレがなかったら、 遠慮なく、ほどほどに、指摘メール・質問メール下さい。 ^^^^^^^^^^^^^^^^^^^^^ AccessやVBAの方が興味がある? そんなこと言わないで、こちらのほうも、見てください。 *C言語興味がない方は、グチ・激論?だけでも読んでください。 オマエ、二兎を追うものは、一兎も〜。。。って言葉知ってる? 知ってるよ、、、う〜ん、、今後、どうしよう? まぁ、先のことは、後で考えましょう、、、そろそろ、始めよ。。。 /* * 2.if文の文法? */ if文のイメージを下記に書きます。 *コレだけじゃないんだけど、、、数回に分けて説明します。 if文の文法 if( 条件 ) { 条件が真の時 } else { 条件が偽の時 } if(a==10) { printf("aは10です"); } if(a < 100) { printf("100未満です"); } if(a == 5 && b == 7) { printf("aが5でbも7です"); } if(a == 5 || b == 7) { printf("aが5 か bが7 です"); } && −−−> AND || −−−> OR == −−−> = < <= > >= != って、ざっと書いても?マークだと思うので、 今回から数回、サンプルを説明するので、感じを感覚でつかんでください。 /* * 3.if文(条件分岐) 例)文字の判断 */ 一文字入力して、入力された文字を判断し、 結果を画面に表示させます。 filename : D:\NO12\TEST12_1.C ----- 1: /* 2: * if文(条件分岐) 3: * 例)文字の判断 4: */ 5: #include6: #include 7: 8: /* メイン処理 */ 9: int main() { 10: 11: char moji; /* 文字変数宣言 */ 12: 13: moji = getch(); /* 1文字入力 */ 14: printf("入力された文字は[%c]です\n", moji); 15: 16: /* 数字判断 */ 17: if('0' <= moji && moji <= '9') { 18: printf("この文字は数字です\n"); 19: } 20: /* abc..判断 */ 21: if('a' <= moji && moji <= 'z') { 22: printf("この文字はアルファベットの小文字です\n"); 23: } 24: /* ABC..判断 */ 25: if('A' <= moji && moji <= 'Z') { 26: printf("この文字はアルファベットの小文字です\n"); 27: } 28: return 0; 29: } ----- 実行結果 入力された文字は[5]です この文字は数字です ----- 簡単な解説 11: char moji; /* 文字変数宣言 */ キーボードから文字を受け取るため、変数を定義します。 13: moji = getch(); /* 1文字入力 */ 14: printf("入力された文字は[%c]です\n", moji); 標準関数Getchを使用して、一文字受け取ります。 16: /* 数字判断 */ 17: if('0' <= moji && moji <= '9') { 18: printf("この文字は数字です\n"); 19: } ここでは、入力された文字が0以上9以下か、ききます(判断します) ポイントは、'0'とシングルコーテーションで囲っているところです。 詳しくは、後日説明するので(またかよ)、 なんとなく、イメージでおぼえてください。 20: /* abc..判断 */ 21: if('a' <= moji && moji <= 'z') { 22: printf("この文字はアルファベットの小文字です\n"); 23: } 同様に、入力された文字がa〜zかききます(判断します) 24: /* ABC..判断 */ 25: if('A' <= moji && moji <= 'Z') { 26: printf("この文字はアルファベットの大文字です\n"); 27: } 同様に、入力された文字がA〜Zかききます(判断します) 簡単に書くと、こんな感じです。 枠外解説・グチ1 -- 「きく」ってなに? なにげなく、AがNullかきいて、その結果で判断、、、 なんて、会話してるけど、新人さんにとっては、???みたいですね。 先輩達の会話が違和感なく聞けるようになったら、一人前?。 コンピュータに聞くわけじゃないのに、ねぇ、、、 あっ、もしかして、うちの会社だけの方言?で、 一般的なソフト会社は、普通に もし、AがNullだったら...とわかりやすい標準語シャベルノカナぁ? 会社によっての方言、、、いろいろありそうで、面白いかも? テメエはナマリがひどすぎるって、、、ハイハイ。。 標準語話すように、努力しますよ。。。 枠外解説・グチ2 -- 不等号の書き方、、、 これも、私の、変なクセの話ですが、 aが20〜の時を普通の人が書くと、 if( a > 20 ) { なのですが、私の場合、 if( 20 < a )とよくします。 逆の20より下は、みなさんと同じで、 if( a < 20 )です。 >向きの不等号、、なぜか、嫌いなんですよ。 例題で、 if('0' <= moji && moji <= '9') { // 0よりmojiが大きく9より小さい と書きましたが、 if(moji >= '0' && moji <= '9') { // mojiが0より大きく9より小さい とちらも、大差ないのですが、なんか<の向きをそろえるへんなクセついてます。 教科書の書き方は、変数 比較演算子 定数 ですよねキット。 さすがに、 if( 0 == a ) とは書きませんが、、if( a==0 )ですね。。 みなさんは、どうでしょうか? 面白い話、あったら、聞かせてください。 /* * 4.if,else文(条件分岐) 例)Y,y の判断 */ filename : D:\NO12\TEST12_2.C ----- 1: /* 2: * if,else文(条件分岐) 3: * 例)Y,y の判断 4: */ 5: #include 6: #include 7: 8: /* メイン処理 */ 9: int main() { 10: 11: char moji; /* 文字変数宣言 */ 12: 13: moji = getch(); /* 1文字入力 */ 14: printf("入力された文字は[%c]です\n", moji); 15: 16: if(moji == 'Y' || moji == 'y') { 17: printf("入力されたのはYです\n"); 18: } else { 19: printf("Y以外の文字が入力されました\n"); 20: } 21: return 0; 22: } ----- 実行結果 入力された文字は[y]です 入力されたのはYです ----- 簡単な解説 11: char moji; /* 文字変数宣言 */ キーボードから文字を受け取るため、変数を定義します。 13: moji = getch(); /* 1文字入力 */ 14: printf("入力された文字は[%c]です\n", moji); 標準関数Getchを使用して、一文字受け取ります。 16: if(moji == 'Y' || moji == 'y') { 17: printf("入力されたのはYです\n"); 18: } else { 19: printf("Y以外の文字が入力されました\n"); 20: } 入力された文字がY,yか聞きます (もし、変数mojiの中身が、Yかyだったら) メッセージprintf("入力されたのはYです\n");を出力します。 それ(Y,y)意外のときは、printf("Y以外の文字が入力されました\n"); と表示します。 文字・文字列について(後日)、詳しく解説したいと思います。 テメエの解説は、政治家みたいに、先送りが多すぎるよ、、 この場で決着つけてほしいなぁ、、、 かんべんしてくださいよ、、、 枠外解説・グチ --- 昔話を一つ、、、NEC98のカナキー、、、、 その昔、C言語で工場関係のシステムを作ってました。 (コンベアを動かして、RS−232Cから重量実績データを受け取る) で、「よろしいですか?(Y/N)」って、処理が実行前の確認で ありました。 プログラムを今回の説明みたいに、 if(moji == 'Y' || moji == 'y') { で組んでました。 オチ、わかった方もいると思いますが、 ある日、どうしても実行できないと問い合わせがあり、 電話対応でも原因がわからなくて、客先に行ってみました。 なんと、 カナキーが押してあり(ロックされていて) Yじゃなくて、ンが返っていたんですね。。。 *なんとなく、怒る気にもなれなかった、、、、 それ以来、Yes,No確認は、 if(moji == 'Y' || moji == 'y' || moji == 'ン') { // ホントはンは半角 するようになりました。 世の中、何が起こるか、わかりませんね。。。 *これも、テメエの想定ミスだろ、、、 /* * 5.おわりの挨拶 */ 今回、簡単なIfの例を2つでした。 説明よりもグチ解説のほうが長かった気もしますが、、、 今日は、このへんで、、、 では、また。 グチの多い(一言多い)三流PGのKen3でした。
No.14 | 1999/11/11 第二回 反省会?反響ランキング と クリック広告について |
[ページTOPへ戻る] |
<第二回 反省会?反響ランキング と クリック広告について> 目次 1.はじめの挨拶 2.タイトルに偽りあり?ジャロに言うぞ・・・進め方編 3.Access97 SP_CONV編 4.今後、やってほしい、要望 5.クリック広告?について、、、相互リンク、広告? 6.おわりの挨拶 ---------------------------------------------------------------------------- /* * 1.こんにちは */ 今回は、メールで送られてきた、感想・苦情・要望をまとめ、 第二回 反省会?反響ランキング の発表(お知らせ) と 友人が始めたクリックするとお金が入る?(どんなしくみだ?) について、、、書きたいと思います。 あっ、私も、まぐクリックに申し込んでしまった、、、 だから、人のこと、あまり言えないんだけど、、、 さて、変なのが出てこないうちに、はじめますか。。。 *変なのって?....始めての人は、バックナンバー見てからのほうが わかりやすいかも。。。 /* * 2.タイトルに偽りあり?ジャロに言うぞ・・・進め方編 */ まず、始めは、細かい話ですが、 タイトルに偽りあり?ジャロに言うぞ・・・進め方編です。 このメルマガのタイトル 三流プログラマーのプログラム講座 なのですが、本人言うのも何なのですが、あまり講座、うまくないです。 *あれ、認めちゃうの?今日は、素直だねぇ、、、 また、どの言語がメインか、、、と質問されても。。。 メールでいただいたのが、 ・C言語をやるのか、AccessやVBAをやるのか、ハッキリさせてほしい。 なんか、中途半端で読みにくい。 --->う〜ん、、、私が、集中力無いので、いろいろ手をつけちゃって、 混乱してる人は、すみません。 火曜日はC,金曜日はVBAなど、決めればいいのかもしれませんが、 このまま、来た話題を優先に続けていこうと思います。 ・2・3日貯めて、濃いのを出したら --->一瞬、変な想像したのは、私だけ? そんなこと書いてると、女性読者無くすぞ、、 なんのこと?、二・三日考えて、内容の濃いメルマガにしてください って、ことでしょ? ダメだよ、変な想像しちゃ??? ・教え方がヘタ、他のメルマガ見て、研究したら? ・私は、C言語できるので、なんとなくわかりますが、 はじめての人には、変数や書き方、コンパイルとは、 もっと丁寧に行ったほうが --->他のメルマガみて、勉強?しました。 私のより、丁寧・親切に書いてあります。はい。 そちらで勉強して、ここも見るってのは、どうでしょうか? 私の悪いメルマガ・プログラムの作りを反面教師にしたり、 いろいろな見方があるんだなぁ、、と思っていただけると。 ・愚痴解説をメインにしたら?タイトルも三流PGの愚痴にして --->ははは、そうですよね。 説明はイマイチだけど、愚痴は面白いなんてメールもありました。 *タイトル、今のところ、このままで行きますが、 何かこのメルマガに合ったタイトル、ギンゴン!と思いついた方は、メール下さい。 あと、ジャロに言わないでね。。。 /* * 3.Access97 SP_CONV編 */ Access97のSP_CONVが変、、、いろいろ、ありました。 時間をさいて、サンプルくれたり、調べてくれたり。 みんさんには、感謝です。 これぐらいのサンプルプログラムでも、データの想定など、 いろいろあることを知っていただけたら、、と思います。 *読者より先に、テメエが勉強になっただろ、、、ハイ。 サタンさんより、SP_CNV関数の修正版をいただきました。 (テンシさんって書いてくれればいいのに、、、) コメントの付け方や、変数名がプロっぽいと感じました。 おいおい、お前も、プログラム作って会社から給料、お客から金取ってんだから、 プロだろ、、もっとしっかりしろよ。。。はい。。。 以下、サタンさんのメールを引用します。参考にしてください。 *足りない部分を解説とありましたが、そのまま載せます。 この場をかりてサタンさんへ「どうもありがとうございます」 ----- ・3つに区切られていた場合とか ・一文字ずつの空白のチェックとか ・255以上の文字列の場合とか 気になる部分をいろいろと改善して私が関数を作ってみました。 一応、関数名は変えておきましたが・・・。 Public Function xSP_Cnv(moji As Variant) As Variant Dim n As Long '空白の文字位置 Dim strSPC As String 'スペース Dim strMoji As String '編集文字列 Dim strLeft As String '空白より左側の文字列 Dim strRet As String 'リターン値 '文字列の前後の空白を削除し、最初の1文字目が漢字で入力されているかを チェックし、 'スペースの種類を設定します。 If LenB(StrConv(Left(Trim(moji), 1), vbFromUnicode)) = 1 Then strSPC = " " '半角スペースを代入 Else strSPC = " " '全角スペースを代入 End If strMoji = Trim(moji) '編集対象文字列に代入 n = InStr(StrConv(strMoji, vbWide), " ") '空白の文字位置をチェック If n <> 0 Then strRet = Left(strMoji, n - 1) '左からn文字切り取りリターン 値を作る strMoji = Trim(Mid(strMoji, n + 1)) 'n文字目以降の文字をから空白 を取り編集文字列へ Do While InStr(StrConv(strMoji, vbWide), " ") <> 0 n = InStr(StrConv(strMoji, vbWide), " ") '空白の前後の文字列を分ける strLeft = Left(strMoji, n - 1) '左からn文字切り取り、空白を 取って代入 strMoji = Trim(Mid(strMoji, n + 1)) 'n文字目以降の文字をから空白 を取り編集文字列へ strRet = strRet & strSPC & strLeft 'スペースをプラスし、リター ン値を作る Loop strRet = strRet & strSPC & strMoji 'スペースをプラスし、リター ン値を作る Else strRet = strMoji End If xSP_Cnv = strRet End Function ----- モジュールを貼りつけるときは、コメントが改行されてるので、 注意してください。 次からの例題モジュールは、データとかエラー処理をよく考えて、 いいもの作ろう、、、 はじめからその心だったら、よかったのにね。 チョットできると思って、天狗になってんじゃないの? そうかなぁ? /* * 4.今後、やってほしい、要望 */ 今後、やってほしい要望として、 ・初心者をみすてないで ---> 私の教え方が悪くって、、見捨ててませんよ ・VCってなに? ---> 私もC++勉強しないと、、Cしか知らないんですよ ・mswinsck.ocx を使ったpop3メールチェッカー --> 難しそう、、できたら感動しそう? ・C++Builderを題材にして頂きたい ---> Ver1.0のCD会社で寝てるので起きたら? ・AccessからExcel/Wordをコントロールしたい ---> いいですねぇ、楽しそう? ・VC6.0を頭から、、 ---> どこを頭って言うのか、、、一緒にやりますか? なんて、イロイロ要望をいただいてますが、 全てやりましょう?とは、言えないので、 落ち着くまでは、C言語・VBA・・いつもの業務関係をからめた愚痴 の三本柱で行きたいと思います。 VBA関係でこんなサンプルほしいなど、ありましたら、 メール送ってください。 /* * 5.クリック広告?について、、、相互リンク、広告? */ 長々と反響に付き合っていただいて、どうも。 ホント長いよねぇ、いつも。 ほっといてよ。。 話を本題に戻して、 友人が1クリックしたらポイントが貯まって、 お金がもらえるシステム(換金される)を始めました。 http://click.gaiax.com/home/kanaaki/main 暇な人は、ホームページの上の広告をクリックしてあげてください。 ヨロシクお願いします、では。。 って言って終わりじゃなくて、 ここからいつものKen3のモードです。 ここで、人間は、魔が差す(漢字いいのかなぁ?) ヤクザが公衆電話から、変造テレカを使用して、 自分自身のQ2の番組に電話をかけて、 NTTからお金をむしりとるみたいに、 まず、自分でクリックしたら、どうなる? を考えますよね。。。 その次に、友達同士で押し合ったら、どうなる? さらに進むと、機械任せで、自動的にクリックできないか? など、楽して儲けようと考えます。 まぁ、しょうがないかなぁ? でも、広告主の人は、、、クリック数が上がっているのに、 売上が上がらない、、、バナー広告なんて、意味が無い、、、やめよう と自然な流れになってしまうんじゃないかと、他人事ながら、心配です。 *毎日、せっせと自分のページクリックしたけど、 お金を換金する段階で、広告会社がツブレるとか、、、 **毎日クリックにかける時間で(時間で) 得られるお金を割ったら、時給いくらになるのだろう? ヤクザみたいに、悪魔に魂をうって、 悪いことしないと、もうからないのでしょうね。キット。 で、終わればいいのに、何を思ったか、 悪魔の手助けツール(自動クリックツール) できないか、昨晩、いろいろ試してしまった。。。 まだ、私の実力では、作れないので、安心でした。 *オイオイ、やろうとする心が問題でしょ。。。 マグマグにも、まぐクリックってのが12月から始まります。 ここでも、やめればいいのに、申し込んでしまった。 はやく寝れば、いいのに、システム屋さんのクセで(私個人のクセ?) チョット疑問点を考えてみた。 ヘッダに配信するだけで、0.2円から0.5円.... えっと、読者数が今、おかげさまで900だから、 0.2*900で、一回180円か、、、 ここで、悪魔のささやき? 一回に送る量を減らして、一日2回配信しようか? また、訂正号なんて、白々しく作って、同様の内容を配信し、二重取り? まぁ、こんなメルマガは、読者からも見放されたり、タレコミ? があって、廃刊でしょうねキット。 でも、正直者が本当に間違えて訂正号送りたかったり、 配信システムのミスだったら? このへんのシステムは、どうなっているのだろう? お前の考えは、小学生なみの、二期作(社会かなぁ?)か、、、 品種を改良して、1回に取れる量を増やす (魅力あるメルマガで読者を2倍にする) は、考えないのかよ。もっとマトモにさ。。。 広告主さんへ、このシステムは、メルマガを読む時、必ず開くので、、 チョット待った、、、必ず?どこかで、イタイ目みた言葉だなぁ。。。 こんなヤツ居ないけど、無料の転送アドレスを200個用意する。 自分自身のメルマガを登録し、メールボックスがあふれないように、 受信だけする。。。キタネエなあ。 じゃ無料アドレス5000個、0.2円で一回1000円かよ。 *まぁ、そんなに登録できないと思うが、 自動クリックシステムよりは、メルマガ読者自動登録は簡単そうだから、、、 Aさんは、メルマガを30誌取ってました。 同じ広告が入ってるんだよな、、なんてことは無いのかなぁ? 3000人に送ったつもりでも、実際に受け取る人は、100人*30誌だったりして 広告の効果って、、、まぁ、配送先のアドレスがダブらない、 システムができてるんだろうけどね。。。 *テメエが考えることは、一流のSEさんたちが考えてるから、 ヨケイナ心配しなくて、いいんだよ。 内容がツマラナくて、読者数が減る現実の心配したほうがいいんじゃない? ごもっともなご意見です。 抜け道が無いように?して、広告主さんを大事に、 NTTみたいに、 公衆電話からはQ2ダメ(無料のアドレスの発送はカウントしない) や 5000円のテレカ禁止(一回の広告料の上限は1000円) みたいに、ならないことを祈ってます。 ここに書いてない、取っておきのウラワザ教えてくださいって、、、 そんなの無いよ、、、そんなの考えるなら、 面白いメルマガ作って、まともに稼ごうよ。 以上、ヨケイナお節介の独り言でした。 *テメエには、0.2円も儲けさしたくない、、、解除だ。。 そんなこと言わないで、、、、 /* * 6.おわりの挨拶 */ あと、少しで読者1000名行きます。 あまり、読者数、気にしていなかったのですが、 クリック関係で、少し考えさせられました。 減れば、ヤッパ、魅力無いんだし。。。 最近、感想メール減って、なんとなくサビシイような、 ほっとしてるような状態です。 が、今後、 良い方向に進めたいと思うので、 手が空いたときに、感想メール・毒舌メールいただけると、うれしいです。 次回の第3回反響メール報告会、、、どうなるだろう? 今日は、このへんで、、、 では、また。 次回は、3日ぐらい貯めてから、濃いのを出したいと思います。 あっ、濃い内容ね。。。 (一言多い)三流PGのKen3でした。