2

C シェルを使用して次のタスクを完了する方法を見つける必要があります (別のシェルは使用できません)。

ガロア体計算を使用して、より大きな多項式から多項式係数を出力するプログラムがあります。出力は 1 行で、次のようになります (数字の実際の値には注意しないでください。ランダムに選んだので、数学的にはうまくいきません)。

(0 1 4 6 7 8 11 12 13) = (0 1)^3 * (0 4 5) * (0 2 4 6)^4 * (0 2 3)^2

多項式の計算方法では、係数が偶数になると、その係数は多項式の値に対して不要になります。1 を掛けるようなものです。私がする必要があるのは、多項式の因数を抽出し、余分な因数を取り除くことです。

sed を使用して、上記の式を次の形式に変更できました。

(0 1) ^ 3 * (0 4 5) * (0 2 4 6) ^ 4 * (0 2 3) ^ 2

しかし、どうすればよいかわかりません。

上記を C シェル スクリプトに入力し、次の配列割り当てを行います。

Array A = (0 1)
Array B = (0 4 5)

次のように、最初に多項式の要素を別々の行に分けるのが最善の方法だと思います。

(0 1) ^ 3
(0 4 5)
(0 2 4 6) ^ 4 
(0 2 3) ^ 2

しかし、これを行う方法がわかりません。

誰でも役立つヘルプやヒントを提供できますか? 多項式の係数の数は変更されることに注意してください。ただし、8 を超えることはないと思います。指数の値は重要ではありません。偶数か奇数かを判断するだけです。それらが変数または配列に割り当てられている場合、私はそれを簡単に行うことができます。単一因子の最大可能サイズは、おそらく括弧内の個体数約 50 です。

4

2 に答える 2

1

おそらく次のようなものが必要です。

#!/bin/tcsh

set str="(0 1) ^ 3 * (0 4 5) * (0 2 4 6) ^ 4 * (0 2 3) ^ 2"

echo "My string: ===$str==="
set arrnum = 0
foreach line ( "`echo '$str' | grep -oP '\([^)]*\)'`" )
    @ arrnum++
    set eval_line = "set array$arrnum = $line"
    eval "$eval_line"
end

echo "created $arrnum arrays (array1 .. array$arrnum)"
foreach i (`seq $arrnum`)
    set arrname = "array$i"
    echo "The content of $arrname"
    set temp = `eval echo '$'$arrname`
    foreach item ( $temp )
        echo $item
    end
end

(x x x x x)各グループに対して array1 .. arrayN を作成します。あなたの文字列の場合:

(0 1) ^ 3 * (0 4 5) * (0 2 4 6) ^ 4 * (0 2 3) ^ 2

版画

My string: ===(0 1) ^ 3 * (0 4 5) * (0 2 4 6) ^ 4 * (0 2 3) ^ 2===
created 4 arrays (array1 .. array4)
The content of array1
0
1
The content of array2
0
4
5
The content of array3
0
2
4
6
The content of array4
0
2
3
于 2014-07-27T16:03:18.657 に答える
0

abc という名前のファイルに多項式があると仮定すると、次のコマンドを使用して、探している出力を取得できます。

cat abc | tr '\052' '\n'

res などの変数に同じものがある場合は、次のコマンドを使用できます。

echo $res | tr '\052' '\n'
于 2014-07-27T13:55:52.517 に答える