내 문제 정의는 다음과 같습니다. 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 ""