□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■ ------------------ CGI・3分クッキング ---------------------(^○^)~~ 発行日:1999年8月27日 毎週火曜と金曜発行 Vol.【015】 ●PR●━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ☆学校の授業や家庭学習、自由研究や調べ学習、エンターテインメントもお任せ。 ☆子供のための新型検索エンジン『JERFI(じぇるふぃ〜)』お試し下さい。 click< http://a.clickincome.net/md/dk?mid=75f2587e87ffc2d024315d65433e0425 > やりたいって言ったら、今すぐやりたいんだい!! いや〜んえっちぃ〜〜、、、じゃないよ、ゲームのお話し。 欲しいソフトが発売日に手元に届きます。こりゃええわい。 てなわけで、こちらにどうぞ。 http://takafumi.grabit.net/powersoft/ ⇔⇔Web新撰組News http://www.web-kyoto.com/ ⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔ Pubzineにて3分クッキングを御購読の皆さまへ、、、 8/25〜8/27の間Pubzineサーバーメンテナンスの為、Vol.015の配信が 送れてしまいました。 申し訳ございません。 ⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━●PR● □■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■ 【今日の献立:正しい縦書きカウンター・その5】=========================   今回は4桁以下の計算関数を作ります。   その前に、まずhcounterj.hを作っておきます。これは、前にちょっとだけ 出てきましたが縦書きカウンターのヘッダファイルです。 /*Count File*/ #define LOGFILE "../tmp/count" /*Directory for Image Files*/ #define IMGDIR "../numbers/" /*Width of Image*/ #define IMG_W 40 /*Height of Image(1-9)*/ #define ONE_H 18 #define TWO_H 20 #define THREE_H 25 #define FOUR_H 22 #define FIVE_H 32 #define SIX_H 27 #define SEVEN_H 24 #define EIGHT_H 26 #define NINE_H 39 /*Height of Image(10,100,1000,10000,100000000)*/ #define JT_H 35 #define JH_H 31 #define JS_H 41 #define JTS_H 31 #define JHM_H 36 /*Height of Image("BANME")*/ #define BANME_H 70   IMG_Wは、画像の横幅です。1〜9、十、百等の画像ファイルの横幅は全て 40ピクセルにしておきます。   その他、xxx_Hとなっているのは縦サイズです。   あと、4桁計算関数中で使う別の関数も作っておきます。   dev(a,b)はa/bの結果を整数で返します。   devp(a,b,c)は、aをbで割った答えがcとすると、a/bの余りを返します。 /*割り算*/ int dev(a,b) unsigned int a,b; { unsigned int c; c = (int)(a / b); return(c); } /*余り*/ int devp(a,b,c) unsigned int a,b,c; { unsigned int d; d=a - (b*c); return(d); }   で、4桁計算部分。 --------------------------------------------------------------- int count_s(count) unsigned int count; { int bg_h=0; unsigned int cdmy1,cdmy2,cdmy3,cdmy4; unsigned int cdmydmy1,cdmydmy2; static int ws[10]={0,ONE_H,TWO_H,THREE_H,FOUR_H,FIVE_H,SIX_H,SEVEN_H,EIGHT_H,NINE_H}; static int jws[5]={JT_H,JH_H,JS_H,JTS_H,JHM_H}; cdmy1=cdmy2=cdmy3=cdmy4=cdmydmy1=cdmydmy2=0; ---------------------------------------------------------------   4桁計算の関数名はcount_s()としておきます。   変数宣言の中でxxxdmyとなっているのは、とりあえずデータを仮保存する 為の使い棄て(?)変数です。 --------------------------------------------------------------- /*if 0-9*/ if(count <= 9){ bg_h=ws[count]; wgs[0]=count; wgscount=1; ---------------------------------------------------------------   これは、1〜9だった場合。   bg_hには、画像の縦サイズを入れます。この場合、一、とか三とか1文字 だけなのでbg_h=ws[count];となっています(countは現在のカウント数)。   ws配列には 0,ONE_H,TWO_H,THREE_H,FOUR_H,FIVE_H,SIX_H,SEVEN_H,EIGHT_H,NINE_H   という値が入っていますので、例えばcountが1の場合はws[1]=ONE_Hとな り、bg_hにはONE_Hが入ります。ONE_Hは、ヘッダファイルで18と定義してあり ますので、bg_h=18となります。   wgs配列には、前から順に画像ファイル名を入れて行きます。画像ファイル 名は、一=1.gif、二=2.gif、十=10.gifとします。よってwgs配列にはカウント数 を入れておいて、それに.gifを足せば画像ファイル名になります。   wgscountは、wgs配列に入っているデータの数です。1桁の場合は1つしか データが入りませんので、wgscount=1;となっています。 --------------------------------------------------------------- /*10-99*/ }else if(count <= 99){ cdmy1=dev(count,10); cdmy2=devp(count,cdmy1,10); if(cdmy2 == 0){ if(cdmy1 ==1){ bg_h=jws[0]; wgs[0]=10;wgscount=1; }else{ bg_h=ws[cdmy1]+jws[0]; wgs[0]=cdmy1;wgs[1]=10;wgscount=2; } }else{ if(cdmy1 ==1){ bg_h=jws[0]+ws[cdmy2]; wgs[0]=10;wgs[1]=cdmy2;wgscount=2; }else{ bg_h=ws[cdmy1]+jws[0]+ws[cdmy2]; wgs[0]=cdmy1;wgs[1]=10;wgs[2]=cdmy2;wgscount=3; } } ---------------------------------------------------------------   次に10〜99ですが、ちょっとややこしくなります。   cdmy1=dev(count,10);はカウント数を10で割ってそれを整数にして cdmy1に代入しています。例えばカウント数が81だった場合は、cdmy1の 値は8になります。10の位の数が何かを計算しているわけです。   cdmy2=devp(count,cdmy1,10);では、さっきの割り算の余り、つまり 1の位の数をcdmy2に代入しています。   if(cdmy2 == 0){ は、もし1の位が0である場合、つまり、十、二十 というような場合という事です。   if(cdmy1 ==1){は、更に10の位が1の時、これは十しかありません。   前にも説明しましたが、10の位を数える場合、二十、三十と数えます が、一十とは数えません。そこで、十なのか、それ以外なのかを区別し ているわけです。   十の時は、1文字だけになりますので、 bg_h=jws[0]; wgs[0]=10;wgscount=1;   となっています。jws[0]には十の画像の縦サイズが入っています。   それ以外の場合は、 bg_h=ws[cdmy1]+jws[0]; wgs[0]=cdmy1;wgs[1]=10;wgscount=2;   となります。二十の場合は、ws[cdmy1](二の縦サイズ)+jws[0]( 十の縦サイズ)がbg_h(画像全体の縦サイズ)になります。   また画像ファイル名は、二=2、と十=10の2つになって、wgscountも 2になります。   十一や、三十五のように1の位が0ではない場合は、更に1の位の画像の 縦サイズを足します。これも同じく10の位が1の時は十X、それ以外の場合 は、X十X、となりますので区別します。 --------------------------------------------------------------- /*100-999*/ }else if(count <=999){ cdmy1=dev(count,100); cdmydmy1=devp(count,cdmy1,100); cdmy2=dev(cdmydmy1,10); cdmy3=devp(cdmydmy1,cdmy2,10); if(cdmydmy1 == 0){ if(cdmy1 == 1){ bg_h=jws[1]; wgs[0]=100;wgscount=1; }else{ bg_h=ws[cdmy1]+jws[1]; wgs[0]=cdmy1;wgs[1]=100;wgscount=2; } }else if(cdmydmy1 <= 9){ if(cdmy1 == 1){ bg_h=jws[1]+ws[cdmydmy1]; wgs[0]=100;wgs[1]=cdmydmy1;wgscount=2; }else{ bg_h=ws[cdmy1]+jws[1]+ws[cdmydmy1]; wgs[0]=cdmy1;wgs[1]=100;wgs[2]=cdmydmy1;wgscount=3; } }else{ if(cdmy1 == 1){ if(cdmy2 == 1){ if(cdmy3 == 0){ bg_h=jws[1]+jws[0]; wgs[0]=100;wgs[1]=10;wgscount=2; }else{ bg_h=jws[1]+jws[0]+ws[cdmy3]; wgs[0]=100;wgs[1]=10;wgs[2]=cdmy3;wgscount=3; } }else{ if(cdmy3 == 0){ bg_h=jws[1]+ws[cdmy2]+jws[0]; wgs[0]=100;wgs[1]=cdmy2;wgs[2]=10;wgscount=3; }else{ bg_h=jws[1]+ws[cdmy2]+jws[0]+ws[cdmy3]; wgs[0]=100;wgs[1]=cdmy2;wgs[2]=10;wgs[3]=cdmy3;wgscount=4; } } }else{ if(cdmy2 == 1){ if(cdmy3 == 0){ bg_h=ws[cdmy1]+jws[1]+jws[0]; wgs[0]=cdmy1;wgs[1]=100;wgs[2]=10;wgscount=3; }else{ bg_h=ws[cdmy1]+jws[1]+jws[0]+ws[cdmy3]; wgs[0]=cdmy1;wgs[1]=100;wgs[2]=10;wgs[3]=cdmy3;wgscount=4; } }else{ if(cdmy3 == 0){ bg_h=ws[cdmy1]+jws[1]+ws[cdmy2]+jws[0]; wgs[0]=cdmy1;wgs[1]=100;wgs[2]=cdmy2;wgs[3]=10;wgscount=4; }else{ bg_h=ws[cdmy1]+jws[1]+ws[cdmy2]+jws[0]+ws[cdmy3]; wgs[0]=cdmy1;wgs[1]=100;wgs[2]=cdmy2;wgs[3]=10;wgs[4]=cdmy3;wgscount=5; } } } } /*1000-9999*/ }else{ cdmy1=dev(count,1000); cdmydmy1=devp(count,cdmy1,1000); cdmy2=dev(cdmydmy1,100); cdmydmy2=devp(cdmydmy1,cdmy2,100); cdmy3=dev(cdmydmy2,10); cdmy4=devp(cdmydmy2,cdmy3,10); if(cdmydmy1 == 0){ bg_h=ws[cdmy1]+jws[2]; wgs[0]=cdmy1;wgs[1]=1000;wgscount=2; }else if(cdmydmy1 <= 9){ bg_h=ws[cdmy1]+jws[2]+ws[cdmydmy1]; wgs[0]=cdmy1;wgs[1]=1000;wgs[2]=cdmydmy1;wgscount=3; }else if(cdmydmy1 <= 99){ if(cdmy4 == 0){ if(cdmy3 == 1){ bg_h=ws[cdmy1]+jws[2]+jws[0]; wgs[0]=cdmy1;wgs[1]=1000;wgs[2]=10;wgscount=3; }else{ bg_h=ws[cdmy1]+jws[2]+ws[cdmy3]+jws[0]; wgs[0]=cdmy1;wgs[1]=1000;wgs[2]=cdmy3;wgs[3]=10;wgscount=4; } }else{ if(cdmy3 == 1){ bg_h=ws[cdmy1]+jws[2]+jws[0]+ws[cdmy4]; wgs[0]=cdmy1;wgs[1]=1000;wgs[2]=10;wgs[3]=cdmy4;wgscount=4; }else{ bg_h=ws[cdmy1]+jws[2]+ws[cdmy3]+jws[0]+ws[cdmy4]; wgs[0]=cdmy1;wgs[1]=1000;wgs[2]=cdmy3;wgs[3]=10;wgs[4]=cdmy4;wgscount=5; } } }else{ if(cdmydmy2 == 0){ if(cdmy2 == 1){ bg_h=ws[cdmy1]+jws[2]+jws[1]; wgs[0]=cdmy1;wgs[1]=1000;wgs[2]=100;wgscount=3; }else{ bg_h=ws[cdmy1]+jws[2]+ws[cdmy2]+jws[1]; wgs[0]=cdmy1;wgs[1]=1000;wgs[2]=cdmy2;wgs[3]=100;wgscount=4; } }else if(cdmydmy2 <= 9){ if(cdmy2 == 1){ bg_h=ws[cdmy1]+jws[2]+jws[1]+ws[cdmydmy2]; wgs[0]=cdmy1;wgs[1]=1000;wgs[2]=100;wgs[3]=cdmydmy2;wgscount=4; }else{ bg_h=ws[cdmy1]+jws[2]+ws[cdmy2]+jws[1]+ws[cdmydmy2]; wgs[0]=cdmy1;wgs[1]=1000;wgs[2]=cdmy2;wgs[3]=100;wgs[4]=cdmydmy2;wgscount=5; } }else{ if(cdmy2 == 1){ if(cdmy3 == 1){ if(cdmy4 == 0){ bg_h=ws[cdmy1]+jws[2]+jws[1]+jws[0]; wgs[0]=cdmy1;wgs[1]=1000;wgs[2]=100;wgs[3]=10;wgscount=4; }else{ bg_h=ws[cdmy1]+jws[2]+jws[1]+jws[0]+ws[cdmy4]; wgs[0]=cdmy1;wgs[1]=1000;wgs[2]=100;wgs[3]=10;wgs[4]=cdmy4;wgscount=5; } }else{ if(cdmy4 == 0){ bg_h=ws[cdmy1]+jws[2]+jws[1]+ws[cdmy3]+jws[0]; wgs[0]=cdmy1;wgs[1]=1000;wgs[2]=100;wgs[3]=cdmy3;wgs[4]=10;wgscount=5; }else{ bg_h=ws[cdmy1]+jws[2]+jws[1]+ws[cdmy3]+jws[0]+ws[cdmy4]; wgs[0]=cdmy1;wgs[1]=1000;wgs[2]=100;wgs[3]=cdmy3;wgs[4]=10;wgs[5]=cdmy4;wgscount=6; } } }else{ if(cdmy3 == 1){ if(cdmy4 == 0){ bg_h=ws[cdmy1]+jws[2]+ws[cdmy2]+jws[1]+jws[0]; wgs[0]=cdmy1;wgs[1]=1000;wgs[2]=cdmy2;wgs[3]=100;wgs[4]=10;wgscount=5; }else{ bg_h=ws[cdmy1]+jws[2]+ws[cdmy2]+jws[1]+jws[0]+ws[cdmy4]; wgs[0]=cdmy1;wgs[1]=1000;wgs[2]=cdmy2;wgs[3]=100;wgs[4]=10;wgs[5]=cdmy4;wgscount=6; } }else{ if(cdmy4 == 0){ bg_h=ws[cdmy1]+jws[2]+ws[cdmy2]+jws[1]+ws[cdmy3]+jws[0]; wgs[0]=cdmy1;wgs[1]=1000;wgs[2]=cdmy2;wgs[3]=100;wgs[4]=cdmy3;wgs[5]=10;wgscount=6; }else{ bg_h=ws[cdmy1]+jws[2]+ws[cdmy2]+jws[1]+ws[cdmy3]+jws[0]+ws[cdmy4]; wgs[0]=cdmy1;wgs[1]=1000;wgs[2]=cdmy2;wgs[3]=100;wgs[4]=cdmy3;wgs[5]=10;wgs[6]=cdmy4;wgscount=7; } } } } } } return(bg_h); } --------------------------------------------------------------- 100〜ですが、これは10〜99と同じです。   dev()とdevp()で数字を1つ1つバラバラにして、1の位が0の時それ以外の 時、10の位が1の時それ以外の時、100の位が1の時それ以外の時・・・とどんど ん区別して場合場合によって計算しています。   最後にreturn(bg_h);で画像全体の縦サイズを返します。   次回は、メインの部分を作ります。 ===============================================================【続く】 リムネットなら旅行、グルメはもちろん、育児だって"ISIZE Club e"でおトク!   ■格安通販「PCアーケード」で今なら、一万円の商品券プレゼント■ click< http://a.clickincome.net/md/dk?mid=bed1559dd40fcea67c6439233c2ee3b1 > ---------------------------------------------------------------------- このメールマガジンは、 Subject部が、CGI3分クッキング【Vol.番号】は、まぐまぐ様にて、 ( http://www.mag2.com/ ) Subject部が、CGI3分クッキング Vol.【番号】は、Macky様にて、 ( http://macky.nifty.ne.jp/ ) Subject部が、CGI3分クッキング番号 は、Pubzine様にて、 配布致しています。 メールマガジンの解除について まぐまぐ様の解除は、 http://www.web-kyoto.com/dp/3min/ に、削除及び登録フォームを用意致しております。 Macky様の解除は、 http://macky.nifty.ne.jp/ を参考して下さい。 Pubzine様の解除は、 http://www.pubzine.com/srchid.asp?keyword=1379 に、削除及び登録フォームを用意致しております。 ---------------------------------------------------------------------- (^○^)/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 【お願い】 このマガジンについてのお問い合わせは、WEB新撰組メーリングリストで、 お願い致します。 参加方法は、 http://www.web-kyoto.com/ml/ を参考にして下さい。 はぎちゃんに対する質問・苦情は、このメールマガジンのリプライでどうぞ。 うら若きお嬢様の愛情も受け付けておりますが、おっさんなので話が通じない と思います。 【今回の担当】 WEB新撰組CGIプログラマー はぎちゃん(萩原 逸郎)でした。                 監修 組長(津田 羊子)&鷹(津田 貴史) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\(^○^)