kategoria: AMOS
[#1] Pomoc z Amosem
Mam pytanie to specjalistow od amosa. Chcialbym wyswietlic cos takiego
....
....
....
....
czyli cztery linie, w kazdej z nich cztery kropki. generalnie mysle o wystwietleniu rogalikowego tla. nie chce uzywac komendy print do drukowania kazdej linii, ale chcialbym to zrobic za pomoca tablic i petli . zakladam, ze potrzebna jest tablica dwuwymiarowa
dim a(4,4)
i dane
czyli
data,1,1,1,1
data 1,1,1,1
data 1,1,1,1
data 1,1,1,1

gdzie 1 bedzie przypisana kropka

tylko nie za bardzo wiem co dalej z tym zrobic, czyli jak wpisac te dane do tablicy i potem wyswietlic na ekranie. gdyby ktos ze specjalistow mogl mi napisac zrodelko mysle, ze polapalbym sie w nim:)
[#2] Re: Pomoc z Amosem

@aszu, post #1

Print będzie raczej tak czy siak. Tobie pewnie chodzi bardziej o to, że nie będą to stałe wartości.

Pytanie czy znak zawsze będzie taki sam?

Jeśli tak to z algorytmicznego punktu widzenia szkoda pamięci na zapamiętywanie ileśtam takich samych znaków.

Lepiej posłużyć się pętlą i printować ten sam znak x razy.
[#3] Re: Pomoc z Amosem

@aszu, post #1

tak na szybko więc nie wiem czy dobrze

dim qpa(3,3)
for x=0 to 3
qpa(x,0)=1
for y=0 to 3
qpa(x,y)=1
next
next

i dalej sobie musisz radzić :)
[#4] Re: Pomoc z Amosem

@aszu, post #1

dim kropki(3,3)

restore kropki

to jest częśc czytająca dane

i=0:j=0
do
do
read kr
kropki (j,i) = kr
inc i
exit if i >3
loop
inc j
exit if j > 3
loop

drukowanie

i=0:j=0
do
do
if kropki(j,i)=0
if i<3
print " ";
else
print " "
end if
else
if i<3
print ".";
else
print "."
end if
end if
inc i
exit if i >3
loop
inc j
exit if j > 3
loop

Starałem się napisać coś w maire uniwersalnego - jakbyś kiedyś zwiększył liczbę linii i kropek. Przy małej ilości linii/kropek można kod znacznie uprościć ;)
[#5] Re: Pomoc z Amosem

@RAL, post #4

Stosowanie do loop w tej formie zamiast prostego for next jest co najmniej dziwne. Jak ten program radzi sobie ze znakiem końca linii, który w funkcji print nieodwołalnie istnieje?
[#6] Re: Pomoc z Amosem

@cholok, post #5

jakie potworki
dobra to ja moze podam prostszy


Dim POLA(5,10)

Restore Dane_pol

Rem --- zapis do tablicy 5 *10 elementow (w zasadzie 6*11 ale indeksy zero ignorujemy) ---
For w=1 to 5
For k=1 to 10
Read Dana
POLA(w,k)=Dana
Next k
Next w


Rem --- Odczyt z tablicy i wyswietlanie na ekranie ------
x=1
y=1
For w=1 to 5
For k=1 to 10
Dana=POLA(w,k)
Gosub wyswietl_pola
x=x+1
Next k
x=1
y=y+1
Next w

End

Rem ---- tutaj definujemy liste obiektow labiryntu: 0- puste pole , 1-sciana 2-drzwi 8-grozna malpa afrykanska -----

Wyswietl_pola:
If Dana=0 then Znak$="."
If Dana=1 then Znak$="#"
If Dana=2 then Znak$="D"
If Dana=8 then znak$="@ "
Print At(x,y);Znak$;
Return

Dane_pol:
Data 1,1,1,1,1,1,1,1,1,1
Data 1,0,0,0,0,0,1,0,0,1
Data 1,0,8,0,0,0,2,0,0,1
Data 1,0,0,0,0,0,1,0,0,1
Data 1,1,1,1,1,1,1,1,1,1
[#7] Re: Pomoc z Amosem

@selur, post #6

dzieki wszystkim za pomoc. pytan z pewnoscia bedzie wiecej:)
[#8] Re: Pomoc z Amosem

@cholok, post #5

Bo for-next jest wolna w stosunku do do-loop :)
Z tego co pamiętam o AMOSIe to właśnie średnik nie "pozwala" na przejście kursora do nowej linii. Jeśli coś pomyliłem to przepraszam ale ja w AMOSie programowałem lat temu 16
[#9] Re: Pomoc z Amosem

@selur, post #6

Oki
Selur sprawdź jak szybko działa twój potworek wobec mojego ;) i dlaczego ignorujesz indeks 0,0 ?

Zobacz też jak niepotrzebnie mnożysz zmienne masz indeksy pętli for-next a dodajesz zmienne x,y i miast użyć instrukcji Inc zmienna używasz zmienna=zmienna+1
[#10] Re: Pomoc z Amosem

@RAL, post #9

Glownie chodzi o to by program byl elastyczny i przejrzysty.
Co do predkosci to owszem zgadza sie, ze for/next sa wolne ale za to bardziej przejrzyste dla uzyszkodnika.

Indeksowanie od 0 jest "bledogenne", znaczy generuje sporo bledow w przyszlosci ze strony programujacego poniewaz wymaga to pamietania, ze indeks 0 to 1, 1 to 2, 2 to 3 , 3 to 4 itd... itp... lepiej poswiecic ta puste kolumne i niech sobie tam leza.

Zmienne x,y sa po to zeby mozna bylo wyswietlic wycinek "mapy" w dowolnym miejscu ekranu.

Owszem INC jest szybsze ale tylko pod edytorem, po kompilacji nie ma to zadnego znaczenia.

btw:
twoj program zawiera blad i w takiej postaci wywala "Illegal function call" w miejscu zapisu do tablicy ale juz znalazlem blad.... wykraczasz poza zakres tablicy.
[#11] Re: Pomoc z Amosem

@selur, post #10

Błąd wziął się z tego, że nie wyzerowałem zmiennej i po każdym wyjściu z wewnętrznej pętli - drobne przeoczenie ;). Ja swojego programu nie sprawdzałem na komputerze ;) pisałem na "sucho".
Być może po kompilacji nie czuć istotnej różnicy szybkości ( tutaj nie jestem pewien jak to było ) z instrukcjami Inc, Dec ale w ten sposób program jest czytelniejszy i mniej trzeba pisać.
Co do indeksowania od 0 - nie jest to problem to normalność na komputerze. Tak samo zaczyna się indeksowanie pikseli na ekranie w oknie.
[#12] Re: Pomoc z Amosem

@RAL, post #11

Nie ma sensu ciagnac tego watku, bo schodzimy na manowce.

Zycie uczy, ze teoria i praktyka sa zgola odmienne..
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem