ひまわりユーザー プログラム掲示板 バックアップ
注意
ひまわりのススメ  □ ひまわり本家Home  □ 新着記事  □ 新規投稿  □ SEARCH  □ 参考プログラム集
ツリー表示

MESSAGE あんまり役にたたない多桁計算(^_^;) /コスモス (02/01/30(Wed) 17:42) [352]
......MESSAGE 感想 /クジラ飛行机 (02/01/31(Thu) 09:34) [358]
............MESSAGE Re[2]: 感想 /コスモス (02/01/31(Thu) 17:46) [367]
..................MESSAGE Re[3]: 感想 /クジラ飛行机 (02/02/01(Fri) 13:14) [370]
........................MESSAGE Re[4]: 感想 /コスモス (02/02/01(Fri) 17:32) [375]
..............................MESSAGE Re[5]: 感想 /クジラ飛行机 (02/02/01(Fri) 20:16) [380]
....................................MESSAGE DLL /コスモス (02/02/02(Sat) 10:45) [382]


親記事 / ▼[ 358 ]
NO.352  あんまり役にたたない多桁計算(^_^;)
□投稿者/ コスモス -(2002/01/30(Wed) 17:42:03)
□U R L/
{
【ソフト名】多桁加算
【作 成 者】コスモス
【ひまわりのバージョン】ver.1.20
【転  件】あまり役にたたないけど可(笑)
【ひまわり本体への梱包】可
【実行時に利用作成するファイル】無
【コメント】
 多桁計算するほどの財産あれば役に立つかも(^▽^笑)
 変数桁数を大きな数字にすればどんな桁数でも計算できます。
 批判がないようなら次回は多桁減算と多桁乗算&除算を
}
終了チェックに 終了処理設定。

*変数等の定義&初期化
  桁数=20。
  配列サイズ=整数((桁数-1)/4+1)。
  表示文字列を 文字列として扱う。
   作業文字列を 文字列として扱う。
  解答#0=0。
   被加算配列#0=0。
  加算配列#0=0。
   配列サイズ回(
     解答の 0行目へ 0を 行挿入する。
      解答は それ。
     被加算配列の 0行目へ 0を 行挿入する。
      被加算配列は それ。
     加算配列の 0行目へ 0を 行挿入する。
      加算配列は それ)。

*被加算数の入力
  被加算数ラベルを ラベルとして 作成。
   その テキストは 「{桁数}桁以内の数値を入力してください。」
  被加算数エディタを エディタとして 作成。
   その 幅は 600。

*加算数の入力
  加算数ラベルを ラベルとして 作成。
   その テキストは 「{桁数}桁以内の加える数値を入力してください。」
   加算数エディタを エディタとして 作成。
  その 幅は 600。

*解答欄の作成
  解答ラベルを ラベルとして 作成。
   その テキストは 「解答」。
   解答エディタを エディタとして 作成。
   その 幅は 600。

*計算開始ボタンの作成
  計算開始ボタンを ボタンとして 作成。
   その テキストは 「計算」
   その イベントは 多桁計算。

*クリアボタンの作成
  クリアボタンを ボタンとして 作成。
   その テキストは 「クリア」
   その イベントは データクリア。

*終了ボタンの作成
  終了ボタンを ボタンとして 作成。
   その テキストは 「終了」
   その イベントは プログラム終了。

   被加算数エディタに 注目。
待機。

*多桁計算
  被加算数エディタの テキストを 被加算数に 得る。
  加算数エディタの テキストを 加算数に 得る。
   被加算数が 数字か。
   判定1は それ。
   加算数が 数字か。
   判定2は それ。
   被加算数の 文字数。
   判定3は それ。
   加算数の 文字数。
   判定4は それ。
   入力数値判定を 呼ぶ。
   数値を配列にセットを 呼ぶ。
   繰り上がり=0。
   iを 0から 配列サイズまで 繰り返し(
     j=配列サイズ-i。
      解答#j=被加算配列#j+加算配列#j+繰り上がり。
      もし 解答#j<10000 ならば(
        繰り上がり=0。
      )。
      違えば(
        解答#j=解答#j-10000。
         繰り上がり=1
      )。
   )。
   結果表示を 呼ぶ。

戻る。

*入力数値判定
   もし 判定1 かつ 判定2 でなければ(
     「数字を入力してください」と 言う。
      データクリアを 呼ぶ。
      待機。
   )。
   もし 桁数<判定3 または 桁数<判定4 ならば(
     「桁数が多すぎます」と 言う。
      データクリアを 呼ぶ
      待機。
   )。
戻る。

*数値を配列にセット
  iを 0から 配列サイズまで 繰り返す(
     j=配列サイズ-i。
      被加算数から 4文字 右端を切り取る。
      もし それ=「」 ならば(
        被加算配列#j=0。
      )。
      違えば(
        被加算配列#j=それ。
      )。
      加算数から 4文字 右端を切り取る。
      もし それ=「」 ならば(
        加算配列#j=0。
      )。
      違えば(
        加算配列#j=それ。
      )。
   )。
戻る。

*データクリア
  被加算数エディタの テキストは 「」。
   加算数エディタの テキストは 「」。
   解答エディタの テキストは 「」。
   iを 0から 配列サイズまで 繰り返し(
     解答#i=0。
   )。
   表示文字列=「」。
戻る。

*結果表示
  表示文字列=「」。
  iを 0から 配列サイズまで 繰り返し(
     作業文字列=解答#i。
     作業文字列を 4桁の ゼロで埋める。
    表示文字列=表示文字列 & それ。)。
  解答エディタの テキストを 表示文字列に 設定。
戻る。

*プログラム終了
  終わり。
戻る。

*終了チェック
  「終わりますか?」と 二択。
   もし それが いいえ ならば(
    終了チェックに 終了処理設定。
   )。



▲[ 352 ] / ▼[ 367 ]
NO.358  感想
□投稿者/ クジラ飛行机 -(2002/01/31(Thu) 09:34:09)
□U R L/ http://www.text2music.com
おぉ、これはすごい!

出来れば、C言語で書いて、DLLにして頂けたら、
ひまわりからネイティブに呼び出せて、重宝されると思います(^v^
なんて、かなり他力本願・・・

ひまわり本体に、これを実装すべき?!



▲[ 358 ] / ▼[ 370 ]
NO.367  Re[2]: 感想
□投稿者/ コスモス -(2002/01/31(Thu) 17:46:55)
□U R L/
クジラさん、こんばんわ。
c言語かあ。
書いて見ようかなあ。cだと割りと簡単に書けちゃうんですよねえ。
Delphiに移る前はcで仕事してたし
cで書きましょうか?

そうなると、加減乗除が必要かも(笑)



▲[ 367 ] / ▼[ 375 ]
NO.370  Re[3]: 感想
□投稿者/ クジラ飛行机 -(2002/02/01(Fri) 13:14:41)
□U R L/ http://www.text2music.com
> クジラさん、こんばんわ。
> c言語かあ。
> 書いて見ようかなあ。cだと割りと簡単に書けちゃうんですよねえ。
> Delphiに移る前はcで仕事してたし
> cで書きましょうか?
>
> そうなると、加減乗除が必要かも(笑)

おぉぉ、心強いお言葉!

あと、Delphiが使えるなら、Delphiが一番だと思います!!
DLL作るのも、Delphiが一番簡単です!



▲[ 370 ] / ▼[ 380 ]
NO.375  Re[4]: 感想
□投稿者/ コスモス -(2002/02/01(Fri) 17:32:46)
□U R L/
>あと、Delphiが使えるなら、Delphiが一番だと思います!!
>DLL作るのも、Delphiが一番簡単です!

 えっ! DelphiってDLLを簡単に作れるんですか? 
 知らなかった。(^_^;)
 Ver1の時にDLL作ろうとして挫折してから、VC++でずっと作ってました。(笑)
ちゃんとヘルプみないて駄目だなあ。(~ペ) ウーン

 Delphiでちょっと考えてみます。

by コスモス



▲[ 375 ] / ▼[ 382 ]
NO.380  Re[5]: 感想
□投稿者/ クジラ飛行机 -(2002/02/01(Fri) 20:16:17)
□U R L/ http://www.text2music.com
>  えっ! DelphiってDLLを簡単に作れるんですか? 
>  知らなかった。(^_^;)
>  Ver1の時にDLL作ろうとして挫折してから、VC++でずっと作ってました。(笑)
> ちゃんとヘルプみないて駄目だなあ。(~ペ) ウーン

めちゃくちゃ簡単ですよ。
DLLを、C++で作るよりも、2倍は確実に楽です。
前に、Delphiで作るサンプルを作って、まだヘルプに入れてなかったので、
簡単なのを書いておきます。
----------------------------------
library dCapture;

uses
Windows, SysUtils,
Classes, graphics;

function ScreenWidth: Integer;
begin
   Result := GetSystemMetrics(SM_CXSCREEN);
end;
function ScreenHeight: Integer;
begin
   Result := GetSystemMetrics(SM_CYSCREEN);
end;

//Captiure
function CaptureWnd(wnd:HWND; FileName: PChar; w,h: Integer):DWORD;
var
   dc: HDC;
bmp: TBitmap;
res: BOOL;
begin
Result := 1;
dc := GetDC(Wnd);
   try
try
   bmp := TBitmap.Create;
try
bmp.Width := w;
bmp.Height := h;
   res := BitBlt(bmp.Canvas.Handle, 0,0, bmp.Width, bmp.Height, dc, 0,0, SRCCOPY);
if res = True then
begin
   bmp.SaveToFile(FileName);
end else
   Result := 0;
finally
   bmp.Free;
end;
except
   Result := 0;
end;
finally
ReleaseDC(Wnd, dc);
end;
end;


//失敗したとき、0を返す
function CaptureDesktop(FileName: PChar):DWORD; stdcall;
begin
   Result := CaptureWnd(GetDesktopWindow, FileName, ScreenWidth, ScreenHeight);
end;
function CaptureActiveWindow(FileName: PChar):DWORD; stdcall;
var
   wnd: HWnd; w,h:Integer;
re: TRECT;
begin
wnd := GetActiveWindow;
GetClientRect(wnd, re);
   w := re.Right - re.Left;
   h := re.Bottom - re.Top;
   Result := CaptureWnd(wnd, FileName,w,h);
end;


exports
   CaptureDesktop,
CaptureActiveWindow;

begin
end.
----------------------------------
デスクトップをキャプチャするDLLなんですけど、
ひまわりに、キャプチャする機能つけたので、お蔵入りになったものです。

作り方は、簡単です。

(1)普通の function の末尾に、stdcall を、つける
function xxxxx:DWORD; stdcall;

(2)下の方の、exports に、DLLで公開したい関数名を書く

の、2つだけです。





▲[ 380 ] / 返信無し
NO.382  DLL
□投稿者/ コスモス -(2002/02/02(Sat) 10:45:18)
□U R L/
そうだったのか、そんなに簡単だったのか・・・
今までの苦労はなんだったんだ【-。-】 ボソッ

というわけで、今度Delphiで作ってみます。



- Child Tree -