درود
چند وقته دارم تمرین الگوریتمیک میکنم و در بش پیاد سازی میکنم و به یه مشکل سهمگین و اعصاب خورد کن بر خوردم.که طاقت نیاوردم و میخوام این رو به عنوان یک پرسش ایجاد کنم.
---------------------------------
الگوریتم: الگوریتمی که ۱۰ عدد را خوانده؛در آرایه ای قرار میدهد؛سپس بزرگترین عنصر آرایه را مشحص کرده؛تعیین میکند که این عنصر در کجای آرایه قرار دارد.
خب این تمرین الگوریتمی زیاد پیچیده ای نداره و اون رو تقریبا به صورت محاوره ای بیان میکنم:
۱-شروع( هر الگوریتمی یک شروع و پایانی داره ( هر چیزی البته ) )
۲- آرایه x را به طول ۱۰ در نظر میگیریم.
۲- i=1
۳- تا زمانی که i<=10 هست برو به : ۴
۴-x(i) را بخوان
۵-i++
۶- پایان حلقه ( شروع از ۳ )
۷-ma=x(i)
۸-index=0
۹-n=1
۱۰-تا زمانی که n<=۹ برو به : ۱۱
۱۱-اگر max < x(i) آنگاه:
max=x(i)
index=i
۱۲-i++
۱۳-پایان حلقه ( شروع از ۱۰ )
۱۴-index , max را چاپ کن
۱۵-پایان
-----------------------------
نکته:در بش عنصر اول شماره صفرم است.
-----------------------------
من سعی کردم که این کد رو در بش پیاده سازی کنم که نتایج زیر رو در بر داشت:
۱-ارور مبداد ( نحوی و منطقی )
۲-جواب مکان رو عنصر ۹ میداد ( فقط میگفت ۹ )
۳-جواب رو کلا صفر میداد و بعدش ارور میداد.
------------------------------
برای همین برای خودم این کار ها رو تست کردم :
۱-برای شرط از دو پرانتز تا دو عدد براکت تست کردم(شرط در حلقه دوم)
۲- سوییچ -gt و علامت بزرگ کوچک تست کردم.
۳-حلقه رو با while بازنویسی کردم
۴-سینتکس حلقه for عوض کردم
۵- از دیباگر بش استفاده کردم ( نتایج جالبی دستگیرم شد )
----------------------------
حالا میرسیم به کد بنده که به شکل زیر هست فعلا :
#!/usr/bin/bash
declare -a array
echo -e "plz enter numbers: \n"
for ((i=1;i<=10;i++))
do
read -p "enter number ${i}: " array
done
max=$array[0]
index=0
for((i=1;i<=10;i++))
do
if [ $array[$i] -gt $max ]
then
max=$array[$i]
index=$i
fi
done
echo -e "the value is : $max, and the index of value is : $index\n"
و همچنین خروجی این کد به همراه حالت bash -x :
+ declare -a array
+ echo -e 'plz enter numbers: \n'
plz enter numbers:
+ (( i=1 ))
+ (( i<=10 ))
+ read -p 'enter number 1: ' array
enter number 1: 1
+ (( i++ ))
+ (( i<=10 ))
+ read -p 'enter number 2: ' array
enter number 2: 2
+ (( i++ ))
+ (( i<=10 ))
+ read -p 'enter number 3: ' array
enter number 3: 3
+ (( i++ ))
+ (( i<=10 ))
+ read -p 'enter number 4: ' array
enter number 4: 4
+ (( i++ ))
+ (( i<=10 ))
+ read -p 'enter number 5: ' array
enter number 5: 5
+ (( i++ ))
+ (( i<=10 ))
+ read -p 'enter number 6: ' array
enter number 6: 6
+ (( i++ ))
+ (( i<=10 ))
+ read -p 'enter number 7: ' array
enter number 7: 7
+ (( i++ ))
+ (( i<=10 ))
+ read -p 'enter number 8: ' array
enter number 8: 8
+ (( i++ ))
+ (( i<=10 ))
+ read -p 'enter number 9: ' array
enter number 9: 9
+ (( i++ ))
+ (( i<=10 ))
+ read -p 'enter number 10: ' array
enter number 10: 10
+ (( i++ ))
+ (( i<=10 ))
+ max='10[0]'
+ index=0
+ (( i=1 ))
+ (( i<=10 ))
+ '[' '10[1]' -gt '10[0]' ']'
main.sh: line 12: [: 10[1]: integer expression expected
+ (( i++ ))
+ (( i<=10 ))
+ '[' '10[2]' -gt '10[0]' ']'
main.sh: line 12: [: 10[2]: integer expression expected
+ (( i++ ))
+ (( i<=10 ))
+ '[' '10[3]' -gt '10[0]' ']'
main.sh: line 12: [: 10[3]: integer expression expected
+ (( i++ ))
+ (( i<=10 ))
+ '[' '10[4]' -gt '10[0]' ']'
main.sh: line 12: [: 10[4]: integer expression expected
+ (( i++ ))
+ (( i<=10 ))
+ '[' '10[5]' -gt '10[0]' ']'
main.sh: line 12: [: 10[5]: integer expression expected
+ (( i++ ))
+ (( i<=10 ))
+ '[' '10[6]' -gt '10[0]' ']'
main.sh: line 12: [: 10[6]: integer expression expected
+ (( i++ ))
+ (( i<=10 ))
+ '[' '10[7]' -gt '10[0]' ']'
main.sh: line 12: [: 10[7]: integer expression expected
+ (( i++ ))
+ (( i<=10 ))
+ '[' '10[8]' -gt '10[0]' ']'
main.sh: line 12: [: 10[8]: integer expression expected
+ (( i++ ))
+ (( i<=10 ))
+ '[' '10[9]' -gt '10[0]' ']'
main.sh: line 12: [: 10[9]: integer expression expected
+ (( i++ ))
+ (( i<=10 ))
+ '[' '10[10]' -gt '10[0]' ']'
main.sh: line 12: [: 10[10]: integer expression expected
+ (( i++ ))
+ (( i<=10 ))
+ echo -e 'the value is : 10[0], and the index of value is : 0\n'
the value is : 10[0], and the index of value is : 0
هرکاری که فکر بکنید کردم حتی از استفاده کردن curly brace تا استفاده نکردن از اون و استفاده از متغیر های جدید و گشتن منوال بشو ... .
کلا از حواب زندگی افتادم این چند وقت فقط فکرم درگیر این بود که مشکل چیه؟؟ :'(