私の問題の定義は次のとおりです。 1. 0 から 999 までの数値を入力として使用し、その数値の英語の値を印刷する Bourn シェルスクリプト dTOe を作成します。上記の問題を解決しようとしています。アドバイスや助けをすることができますか?
#! /bin/bash
number=$1
if [ $number -lt 0 -o $number -gt 999 ]
then
echo put the right input between 0 and 999
fi
case "$number"
[0-9])
答え1
あなたの思考プロセスがデジタルから散文形式にどのように変換されるかを考えてください。最初は何を見ますか?この情報で何をしますか?あなたのワークフローには手続き型で表現できるパターンはありますか?これを使用可能なコマンドに似た、小さくて個別のステップにどのように分割しますか?
上記のアイデアは、プログラミングとスクリプトの本質です。
すでにプロセスの概要を念頭に置いて、それを「擬似コード」(シェルでない場合は理解できる単語)として作成し、プロセスを段階的に進めて目的の操作を実行することを確認します。 。考えるあなただけでなく説明する。次に、母国語からシェルコマンドに翻訳します。
たとえば、どのくらいのビット値を表示する必要があるかを判断するのが良い出発点です。すぐに思い浮かぶいくつかのアプローチがあります。 「私たちは何桁ですか?」または「この数字は99より大きいですか?9より大きいですか?」あるいは、プールを必要としないシステムを見つけることもできます。まず問題。
この場合、最初に必要なのは、シェルでいくつかの基本的な算術と比較テストを実行できることです。だから:
数値を変数として読み、ユーザーが実際に解析したくない内容を入力していないことを確認するnumber
ために完全なチェックを行ったとしましょう。次のように起動できます。-53
3.14
albatross
output=""
if [[ "$number" -gt 100 ]]; then
# okay, we know $number is greater than 100
hundreds=$((number/100))
case $hundreds in
1) output="one" ;;
2) output="two" ;;
3) output="three" ;;
# et cetera
esac
number=$((number-100*hundreds))
fi
output="$output hundred"
そこから構築できます。
答え2
echo -n "Enter number : "
read num
length=$(echo $num | wc -c)
length=$(( $length - 1 ))
echo "Your number $num in words : "
for (( i=1; i<=$length; i++ ))
do
# get one digit at a time
digit=$(echo $num | cut -c $i)
# use case control structure to find digit equivalent in words
case $digit in
0) echo -n "zero " ;;
1) echo -n "one " ;;
2) echo -n "two " ;;
3) echo -n "three " ;;
4) echo -n "four " ;;
5) echo -n "five " ;;
6) echo -n "six " ;;
7) echo -n "seven " ;;
8) echo -n "eight " ;;
9) echo -n "nine " ;;
esac
done
# just print new line
echo ""