Cкрипт: cлучайное распределение, greenday, 07-Фев-08, 02:12 [смотреть все]Здравствуйте! Я только начал изучать программирование под Linux, столкнулся с определенными трудностями. Задача на самом деле кажется простой, но реализовать именно под линукс мне к сожалению не удаётся. Нужно написать сценарий, который определяет распределение случайных чисел встроенного генератора bash. В командной строке сценария указывается, для какого кол-ва чисел требуется построить распределение. На стандартный вывод выдаётся кол-во чисел, попавшее в каждую тысячу. Пример: ./m.sh 100 0-999 4 1000-1999 5 ... Вот собственно моё творчество: #!/bin/bash count=1 i=0 m=0 n=999 number=0 MAXCOUNT=${1:-0} {может можно инициализировать массив покороче, а то больно громоздко?) con[0]=0 con[1]=0 con[2]=0 con[3]=0 con[4]=0 con[5]=0 con[6]=0 con[7]=0 con[8]=0 con[9]=0 con[10]=0 con[11]=0 con[12]=0 con[13]=0 con[14]=0 con[15]=0 con[16]=0 con[17]=0 con[18]=0 con[19]=0 con[20]=0 con[21]=0 con[22]=0 con[23]=0 con[24]=0 con[25]=0 con[26]=0 con[27]=0 con[28]=0 con[29]=0 con[30]=0 con[31]=0 con[32]=0 con[33]=0 while [ "$count" -le $MAXCOUNT ] do number=$RANDOM i=0 m=0 n=999 while [ "$i" -lt 33 ] do if [ "$number" -lt "$m" ] then if [ "$number" -le "$n" ] then let "con[ i] +=1" - пробел поставлен специально для форума(дабы избежать курсива) fi fi let "i +=1" let "m +=1000" let "n +=1000" done let "count += 1" done i=0 m=0 n=999 while [ "$i" -lt 33 ] do echo $m "-" $n "____" ${con[ i]} - пробел поставлен специально для форума(дабы избежать курсива) let "i += 1" let "m +=1000" let "n +=1000" done Почему-то на выходе одни нули. В массив ничего не записывается.
|
- Cкрипт: cлучайное распределение, angra, 02:47 , 07-Фев-08 (1)
Две причины почему такие вопросы часто остаются без ответа: 1. Задача непрактическая, а значит задана для проверки ВАШИХ знаний, а не знаний участников форума. Вы же не захотите попасть в руки врача сдавшего экзамен или устроившегося на работу подобным образом. 2. Читать код без отступов мягко говоря неприятно. Если вам жалко потратить время на его форматирование, то другим жалко тратить время на разбор.
- Cкрипт: cлучайное распределение, anonymous, 06:13 , 07-Фев-08 (2)
>{может можно инициализировать массив покороче, а то больно громоздко?) Посмотрите цикл for и используйте программу seq. >let "i +=1" i=$[$i+1] и остальные let аналогично В общем такое впечатление, что вы просто посмотрели исходники других скриптов и попробовали на основе прочитанного написать программу, не читая теории. Так не пойдёт в любом случае. Почитайте man bash (кстати послужит в будущем хорошим справочником). Почитайте: BASH Programming - Introduction HOW-TO http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html Advanced Bash-Scripting Guide http://tldp.org/LDP/abs/html/ Нужно сначала понять язык, а потом писать. bash слишком много прощает, и у вас создаётся ложное впечатление понимания конструкций языка.
- Cкрипт: cлучайное распределение, phpcoder, 14:22 , 07-Фев-08 (3)
[...] >Почему-то на выходе одни нули. В массив ничего не записывается. Потому что вы её запускаете без параметров и переменная MAXCOUNT выставляется в ноль? У меня если запускать без параметров тоже все нули, а вот если с параметром 100, то вроде работает: 0 - 999 ____ 0 1000 - 1999 ____ 0 2000 - 2999 ____ 3 3000 - 3999 ____ 4 4000 - 4999 ____ 7 5000 - 5999 ____ 9 6000 - 6999 ____ 11 7000 - 7999 ____ 14 8000 - 8999 ____ 17 9000 - 9999 ____ 18 10000 - 10999 ____ 24 11000 - 11999 ____ 30 12000 - 12999 ____ 33 13000 - 13999 ____ 35 14000 - 14999 ____ 37 15000 - 15999 ____ 39 16000 - 16999 ____ 41 17000 - 17999 ____ 43 18000 - 18999 ____ 45 19000 - 19999 ____ 50 20000 - 20999 ____ 53 21000 - 21999 ____ 61 22000 - 22999 ____ 66 23000 - 23999 ____ 68 24000 - 24999 ____ 73 25000 - 25999 ____ 78 26000 - 26999 ____ 80 27000 - 27999 ____ 84 28000 - 28999 ____ 87 29000 - 29999 ____ 89 30000 - 30999 ____ 92 31000 - 31999 ____ 94 32000 - 32999 ____ 95
|