The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Cкрипт: cлучайное распределение"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Cкрипт: cлучайное распределение"  
Сообщение от greenday (ok) on 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ообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Cкрипт: cлучайное распределение"  
Сообщение от angra (ok) on 07-Фев-08, 02:47 
Две причины почему такие вопросы часто остаются без ответа:
1. Задача непрактическая, а значит задана для проверки ВАШИХ знаний, а не знаний участников форума. Вы же не захотите попасть в руки врача сдавшего экзамен или устроившегося на работу подобным образом.
2. Читать код без отступов мягко говоря неприятно. Если вам жалко потратить время на его форматирование, то другим жалко тратить время на разбор.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Cкрипт: cлучайное распределение"  
Сообщение от anonymous (??) on 07-Фев-08, 06:13 
>{может можно инициализировать массив покороче, а то больно громоздко?)

Посмотрите цикл 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ообщить модератору

3. "Cкрипт: cлучайное распределение"  
Сообщение от phpcoder email(??) on 07-Фев-08, 14:22 
[...]
>Почему-то на выходе одни нули. В массив ничего не записывается.

Потому что вы её запускаете без параметров и переменная 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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




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

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