The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
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




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру