2

4 つの浮動小数点変数をパラメーターとして渡す必要があるプログラムを C で作成しました。このプログラムを x 回実行するスクリプトを作成したいと思います。これらの 4 つの変数は、プログラムが再度実行される前に毎回一定量ずつ減少します。

Batch と bash は浮動小数点数をサポートしていませんが、bc は bash スクリプトで使用できる任意の精度をサポートしています。バッチが適切ではないことに気付いた最近のバッチスクリプトを除いて、私は以前にスクリプトを作成したことがないと言わなければなりません。

この分野では比較的初心者なので、グーグルと検索で特に役立つものは何も見つからなかったので、ここにいます。

これが基本的に私が欲しいものです:

MINX=-2.0
MAXX=0.8
MINY=-1.4
MAXY=1.4

for X times
{
    myprogram minX maxX minY maxY

    MINX-=0.1
    MAXX-=0.1
    MINY-=0.1
    MAXY-=0.1
}

したがって、初期変数セットを使用してプログラムを実行し、それらの変数をデクリメントしてプログラムを再度実行したいと考えています。

これまでにbash + bcの浮動小数点変数で見つけたものはすべて、それを理解できないようです。そのため、達成したいことを説明していただければ幸いです。説明できます:)

前もって感謝します。

4

3 に答える 3

4

全体を AWK で記述します。

#!/usr/bin/awk -f
BEGIN {
    X = 100
    minX = -2.0
    maxX = 0.8
    minY = -1.4
    maxY = 1.4

    for (i = 1; i <= X; i++) {
        system("myprogram " minX " " maxX " " minY " " maxY)

        minX -= 0.1
        maxX -= 0.1
        minY -= 0.1
        maxY -= 0.1
    }
}
于 2012-07-05T13:05:35.140 に答える
2

バッシュ&BC

#!/bin/bash
X=3     #cycle count

MINX=-2.0
MAXX=0.8
MINY=-1.4
MAXY=1.4

function fpcalc() {
    echo "scale=4; $@" | bc -l
}

X=$(($X + 1))
while let X-=1
do
    echo myprog  $MINX $MAXX $MINY $MAXY    #delete the echo
    MINX=$(fpcalc $MINX-0.1)
    MAXX=$(fpcalc $MAXX -0.1)
    MINY=$(fpcalc $MINY -0.1)
    MAXY=$(fpcalc $MAXY -0.1)
done

パール&バッシュ

#delete the "echo" after the "xargs"
echo -2.0 0.8 -1.4 1.4 | perl -lane 'for(1..3){print"@F";@F=map{$_-=0.1}@F}' | xargs -L 1 echo myprog

両方の例では、カウント (X) = 3 です。どちらも出力を生成します (「echo」を削除すると、myprog が実行されます)。

myprog -2.0 0.8 -1.4 1.4
myprog -2.1 0.7 -1.5 1.3
myprog -2.2 0.6 -1.6 1.2
于 2012-07-05T23:42:43.123 に答える
1

同等のスクリプトを作成することでこれを行うことができます(実際には、疑似コードと構文bcの間にほとんど違いはありません)、それを呼び出すか、他のものを呼び出します。bcmyscript.bc

#!/usr/bin/bc -q

minx = -2.0
maxx = 0.8
miny = -1.4
maxy = 1.4

for (x = 0; x < 10; x = x+1)
  {
    print "myprogram ", minx, " ", maxx, " ", miny, " ", maxy, "\n"

    minx = minx - 0.1
    maxx = maxx - 0.1
    miny = miny - 0.1
    maxy = maxy - 0.1
  }

halt

(ba)sh次に、その出力を次のようにパイプします。

bc -q myscript.bc | sh

または、スクリプトが「実行可能」である場合 (シバンのおかげで)、次のようにすることもできます。

./myscript.bc | sh
于 2012-07-05T12:42:21.397 に答える