1

No właśnie. Potrzebuję działać na 2  dwuwymiarowych tablicach liczbowych (powiedzmy max. 40x40 pól, maksymalna liczba w komórce to 255, wszystkie dodatnie). Dane z jednej tablicy samomodyfikują się poprzez zmianę danych w drugiej. Tablice są deklarowane przez DIM lub COM (ten sam objaw), wiadomo że zakres tablic liczbowych w TB jest od 0 do x, czyli rozmiar - powiedzmy - zadeklarowany przez DIM A(10,10) odpowiada 11 wierszom i 11 kolumnom, prawda?
W czym rzecz: przed kompilacją działania na tablicach działają zgodnie z oczekiwaniami. Ale po kompilacji, po pierwszej modyfikacji danych (zmiana liczb) zaczynają się schody - zamiast oczekiwanych wyników pojawiają się w drugiej tablicy pojawiają się zera. Jak temu zaradzić..?
To znaczy, czy istnieje inny sposób na ominięcie tego problemu niż ręczne modyfikowanie pamięci...?

Sikor umarł...

2

Nie wiem, ile TB rezerwuje na tablice liczb, ale zakładając optymistycznie, że tylko 6 bajtów na element, potrzebowałbyś 2 tablice * 40 kolumn * 40 rowków * 6 bajtów = dużo. Liczby całkowite 0-255 lepiej trzymać w DIM A$(1600) i I=40*Y+X+1:A$(I,I)=CHR$(LICZBA):LICZBA=ASC(A$(I,I))

https://www.youtube.com/watch?v=jofNR_WkoCE

3

Wyjaśnij, na czym polega "samomodyfikacja danych z jednej tablicy poprzez zmianę danych w drugiej".

Hitler, Stalin, totalniak, SSman, NKWDzista, kaczor dyktator, za długo byłem w ChRL, wypowiadam się afektywnie.

4

pewnie zapis do pierwszej tablicy odbywa sie przez funkcje ktora dokonuje przeliczen i zmian w tablicy drugiej

http://atari.pl/hsc/ad.php?i=1.

5

O wiele jaśniej byłoby jakbyś wkleił jakiś fragment...

6

Tak jak prawi XXL: przy zmianie wartości w jednej tablicy jest przeliczana wartość drugiej tablicy na podstawie założonego wzoru. I powtarzam: przed kompilacją działa w 100%, po kompilacji i zlinkowaniu już niestety nie ;(

Sikor umarł...

7

Sikor:  Dawj kawalek kodu to sie obaczy;)

ps. a oryginalny ten basic jest i linker tez?

My tu gadu gadu, a dziewczyny w Ornecie nic cieplego w ustach od rana nie mialy:) <>

8

przypominam - RUNTIME2.EXE - poprawki by SIMUS?? - bo jest to poprawiona wersja bibliotek. O ile cokolwiek moze to w tej materii zmienic

Kontakt: pin@usdk.pl

9

Pin: korzystam z Runtime 2 - i niestety to nie to, chyba że tego nie przewidzieli. Co do kodu - jak sprawdzę na mniejszej tablicy i będzie to samo, wkleję.

Sikor umarł...

10

tak, czy siak powinienes wkleic - coby ku potomnym zostalo

btw. sikor programuje :D

The UNIX Guru`s view of Sex:
unzip; strip; touch; finger; mount; fsck; more; yes; umount; sleep

11

Na problemy kompilowanego TB-XL z tablicami natknąłem się dawno temu przy pisaniu mojej gierki "Pająki II". Musiałem wtedy przerabiać program, aby pozbyć się tablic i zastąpić je zmienną tekstową. W czystym TB tablice działają prawidłowo. W kompilowanym już nie. Nie dociekałem gdzie tkwi błąd. W swoich programach pisanych w TB-XL (np. w "Klonach") zwyczajnie unikam tablic liczbowych... :)

12

skoro tablice tekstowe calkowicie rozwiazuja problem, to po co sie zaglebiac ;)
moze bedzie to nieco wolniejsze, ale i tak skoro to jest pisane w basicu to chyba na predkosci nie zalezy :P

The UNIX Guru`s view of Sex:
unzip; strip; touch; finger; mount; fsck; more; yes; umount; sleep

13

Jellonek: po kompilacji działa całkiem szybko.
Larek: skoro tak, to znaczy, że muszę co nieco przepisać i można ten wątek zamknąć. Trzeba tylko dopisać w Atariki (co zaraz uczynię), że po kompilacji są błędy przy tablicach liczbowych ;(

Sikor umarł...

14

To jeszcze nic. Byków w tym rantajmie jest od groma. Jak masz za bardzo (choć niewiele potrzeba) rozbudowane wyrażenie opisujące indeks w tablicy, to runtime2 wywali ci błąd nr 9. Inny ciekawy problem dotyczy (U)INSTR(), ztcp nie można użyć jej w wyrażeniu, bo wtedy daje 0. Najpierw X=INSTR(), a dopiero potem liczysz. Albo USR() - zamiast z $D4/$D5 pobiera wyjście z jakiegoś kosmosu (jeśli w ogóle pobiera, nie miałem czasu szukać zależności).

Hitler, Stalin, totalniak, SSman, NKWDzista, kaczor dyktator, za długo byłem w ChRL, wypowiadam się afektywnie.

15

epi napisał/a:

Inny ciekawy problem dotyczy (U)INSTR(), ztcp nie można użyć jej w wyrażeniu, bo wtedy daje 0. Najpierw X=INSTR(), a dopiero potem liczysz.

Hmm, w moich programikach często używam tej funkcji i do tej pory nie miałem problemu.
Np. w "Klonach" jest m.in. coś takiego:
IF NOT INSTR(POL$,"0") THEN GO# KON
i działa poprawnie.
Może nie w każdym przypadku ujawnia się błąd.

16

To może spróbuj F$(INSTR(F$," "))="ABC"

Hitler, Stalin, totalniak, SSman, NKWDzista, kaczor dyktator, za długo byłem w ChRL, wypowiadam się afektywnie.

17 Ostatnio edytowany przez larek (2006-09-15 12:02:14)

epi - to nie chce działać nawet w niekompilowanym TB :/

18

w multibasicu bedzie dzialalo :P

The UNIX Guru`s view of Sex:
unzip; strip; touch; finger; mount; fsck; more; yes; umount; sleep

19 Ostatnio edytowany przez drac030 (2006-09-15 12:42:03)

Dobrze powiedziane, "będzie" ;) Na razie nie działa, bo nie ma INSTR/UINSTR.

KMK
? HEX$(6670358)

20

Nie ma takich prostych funkcji?? ;)

21

Osobiście nigdy ich nie używałem, więc odłożyłem to sobie na potem razem z paroma innymi rzeczami. :)

KMK
? HEX$(6670358)