मैं फोर्थ में कोड लिख रहा हूं जो 1 से 8 तक यादृच्छिक संख्याओं की 12x12 सरणी बनाना चाहिए।

create big_array 144 allocate drop
: reset_array big_array 144 0 fill ;
reset_array 
variable rnd here rnd !
: random rnd @ 31421 * 6927 + dup rnd ! ;
: choose random um* nip ;
: random_fill 144 1 do 8 choose big_array i + c! loop ;
random_fill
: Array_@ 12 * + big_array swap + c@ ;
: show_small_array cr 12 0 do 12 0 do i j Array_@ 5 u.r loop cr loop ;
show_small_array

हालाँकि, मैंने देखा कि मेरे सरणी के 128 से 131 तत्व हमेशा अपेक्षा से बहुत बड़े होते हैं:

0    4    0    4    2    6    0    5    2    5    7    3
6    3    7    3    7    7    3    1    5    0    6    1
0    3    3    0    3    1    0    7    2    0    4    5
3    7    6    6    2    1    0    2    3    4    2    7
4    7    1    5    3    5    7    2    3    5    3    6
3    0    6    4    1    3    3    2    5    4    4    7
3    2    1    4    3    4    3    7    2    6    5    5
2    4    4    3    4    5    4    4    6    5    6    0
2    5    2    7    3    1    5    0    1    4    6    7
2    0    3    3    0    7    3    6    4    1    3    6
0    1    1    6    0    3    0    2  169  112   41   70
7    2    3    1    2    2    7    6    0    5    1    2

इसके अलावा, जब मैं इन तत्वों के मूल्य को अलग-अलग बदलने की कोशिश करता हूं, तो यह अन्य तीन तत्वों को मूल्य बदलने का कारण बनता है। उदाहरण के लिए, यदि मैं कोड:

9 choose big_array 128 + c!

तो सरणी बन जाएगी:

0    4    0    4    2    6    0    5    2    5    7    3
6    3    7    3    7    7    3    1    5    0    6    1
0    3    3    0    3    1    0    7    2    0    4    5
3    7    6    6    2    1    0    2    3    4    2    7
4    7    1    5    3    5    7    2    3    5    3    6
3    0    6    4    1    3    3    2    5    4    4    7
3    2    1    4    3    4    3    7    2    6    5    5
2    4    4    3    4    5    4    4    6    5    6    0
2    5    2    7    3    1    5    0    1    4    6    7
2    0    3    3    0    7    3    6    4    1    3    6
0    1    1    6    0    3    0    2    2   12  194   69
7    2    3    1    2    2    7    6    0    5    1    2

क्या आपके पास कोई विचार है कि ये विशिष्ट तत्व हमेशा प्रभावित क्यों होते हैं और यदि इसे रोकने का कोई तरीका है?

2
doraymefaso 12 अक्टूबर 2020, 12:54

1 उत्तर

सबसे बढ़िया उत्तर

बेहतर पठनीयता और कम त्रुटि प्रवण: 144 allocate144 chars allocate

एक गलती: create big_array 144 allocate dropcreate big_array 144 chars allot

एक गलती: random um* niprandom swap mod

एक गलती: 144 1 do144 0 do

अत्यधिक ऑपरेशन: big_array swap +big_array +

और कृपया स्टैक टिप्पणियां जोड़ें। खासकर, जब आप मदद मांगते हैं।

क्या आपके पास कोई विचार है कि ये विशिष्ट तत्व हमेशा प्रभावित क्यों होते हैं और यदि इसे रोकने का कोई तरीका है?

चूंकि आप डिक्शनरी स्पेस में मेमोरी को बिना रिजर्व किए इस्तेमाल करने की कोशिश करते हैं। इस मेमोरी का उपयोग Forth system द्वारा किया जाता है।

1
ruvim 12 अक्टूबर 2020, 19:46